Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

PIC18 : проблемы с MSSP модулем (i2c ведомый, 10 бит адрес)

Отправлено Meteor 11 января 2007 г. 02:11


Есть прога - обработчик прерывания i2c.
;=============================
Инициализация MSSP модуля
;=============================
comf PORTB,0 ;
andlw b'00000111'
movwf ADDRESS0
bsf ADDRESS0,5 ; установка адреса
MOVLW b'11110000'
movwf ADDRESS1
movwf SSPADD ; старший байт

movlf b'00110111',SSPCON1 ; MSSP вкл,ведомый I2C, 10бит адрес
clrf SSPCON2 ; общий вызов отключен, задержка CLOCK отключена
movlf b'10000000',SSPSTAT ; стандартный режим I2C (бит6=1 - SMBus specific)
movfw SSPBUF
bcf SSPCON1,SSPOV

bcf RCON,IPEN ;
bcf PIR1,SSPIF
bsf PIE1,SSPIE ; разрешить прервания от MSSP
bsf INTCON,PEIE
bsf INTCON,GIE
;====================================
Обработчик прерывания
;====================================
interrupt

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 модуля.
Может кто наступал уже на эти грабли ? Что посоветуете ?

Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 34:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru