Ь IV. Примеры конкретных применений
регистра захвата/сравнения (SCCI). SCCI обеспечивает очень важную аппаратную роль CCR1, позволяющую запоминать принятый логический уровень на входе Р1.2 по синхросигналам, выработанным таймером Timer_A3 независимо от вычислительного ядра. В нашем примере применения вычислительное ядро практически бездействует, в то время как ИК декодер работает. Даже при отключенном вычислительном ядре логический уровень на входе Р1.2 будет зафиксирован и сохранен в SCCI в моменты, когда CCR1 выполняет сравнение. Прикладная программа не считывает данные непосредственно со входа Р1.2; вместо этого происходит считывание защелкнутых в SCCI данных. Программа постепенно возвратит полученные от SCCI данные и сохранит их в регистре памяти IRData.
RX_Cont bit.w *SCCI, *CCTL1 ; Carry = Data бит
; в SCCI
rlc.w IRData ; Carry —> IRData
После возвращения каждого бита CCR1 перестраивается на захват и по нарастающему и по падающему фронту. Следующий захват данных произойдет точно в середине битового периода, что приведет к автоматической синхронизации с принимаемым потоком данных от ИК приемника. Для того чтобы гарантировать правильный прием данных, прерывание от CCR2 также разрешено и в него загружено значение половины длительности бита, сохраненного в CCR1. Если пакет принимается правильно, то следующее изменение принимаемого бита должно произойти через четверть длительности периода бита. При правильном приеме подпрограмма CCR1JSR обработки прерывания от CCR1 производит сброс запроса на прерывание от CCR2. Если CCR1JSR не отследит прерывание, то подпрограмма CCR2JSR обработки прерывания от CCR2 сбросит декодер, предположив ошибку в принимаемом пакете. В нормальном режиме баланс отрицательных и положительных битов сохраняется, и принимаемые данные сохраняются в регистре IRData.