Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
bcf PIR1,SSPIF ; флаг запроса прерывания от MCCP
bcf SSPCON1,4 ; удерживать SCL в лог 0
receiv_adress
btfsc SSPSTAT,2 ; R/W, read = 1
bra _tx_i2c_data ; передача данных к ведущему
; прием адреса или данных
bcf SSPCON1,SSPOV ; сброс флага переполнения буфера - выход из сост.ошибки
movfw SSPBUF ; сброс SSPSTAT,BF - формируется аппаратно бит подтвердения приема
btfss SSPSTAT,UA ; принят байт адреса ?
goto _rx_i2c_data ; нет, принять данные
; да
clrf count_tx_begin
movff ADDRESS1, WREG
cpfseq SSPADD ; определение номера принятого байта адреса
bra set_address1
movff ADDRESS0, SSPADD ; принят ст. байт, потготовка к приему мл. байта адреса, сброс SSPSTAT,UA
bra _exit
set_address1 ; принят мл. байт адреса
movff ADDRESS1, SSPADD ; потготовка к приему ст. байта адреса (в след.раз),сброс SSPSTAT,UA
bra _exit
;=============== передача данных ведущему ===========
_tx_i2c_data
movff INDF1,SSPBUF
incf FSR1L,f;
goto _exit
;=========== прием начального адреса для передачи данных ==========
_rx_i2c_data
movff SSPBUF,count_byte
;===================================
_exit
bsf SSPCON1,4 ; отпустить SCL
retfie FAST
;====================================
Проблема: периодически перестает работать. Замечено что если в режиме
отладки дебаггером ICD2 установить breakpoint на первый оператор процедуры обработки прерывания и после остановки снова запустить программу, прерывания перестают генерироваться. Лечится только выключением и затем повторной инициализацией MSSP модуля.
Может кто наступал уже на эти грабли ? Что посоветуете ?