Библиотека Компэла 319


Ь 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.