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

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

а я подразнить люблю :)

Отправлено Политика 26 января 2008 г. 13:02
В ответ на: Ну так напряги память, а то чего зря воздух сотрясать. отправлено Codavr 26 января 2008 г. 12:57

вот кусок обработчика прерывания, на асме, если разберешься то поймешь, а мне напрягать лениво.

;===============================;_CAN_INTERRUPT_
intcanerr: ;Error
bcf PIR3,ERRIF ;Clear the interrupt flag
movlb 0x0f ;
btfsc COMSTAT,2,1 ;skip if == 0
bcf TXB0CON,TXREQ,1 ;Stop Transmit
clrf RXERRCNT,1 ;сброс ошибок приемника.
clrf TXERRCNT,1 ;сброс ошибок передатчика.
movlb 0x00 ;
bra intloc ;end
intcantxb2: ;TXB2
bcf PIR3,TXB2IF ;Clear the interrupt flag
bra intloc ;end
intcantxb1: ;TXB1
bcf PIR3,TXB1IF ;Clear the interrupt flag
bra intloc ;end
intcantxb0: ;TXB0
blinka 0
bcf PIR3,TXB0IF ;Clear the interrupt flag
call cansrch ;TRANSMIT
bra intloc ;end
intcanrxb1: ;RXB1
blinka 2
movlw 0x0A ;
call canrecived ;
bcf PIR3,RXB1IF ; Clear the interrupt flag
movlb 0x0f
bcf RXB1CON,RXFULL,1 ;Clear Buffer.
movlb 0x00
bra intloc ;end
intcanrxb0: ;RXB0
blinka 1
movlw 0x0C ;
call canrecived ;
bcf PIR3,RXB0IF ; Clear the interrupt flag
movlb 0x0f
bcf RXB0CON,RXFULL,1 ;Clear Buffer.
movlb 0x00
bra intloc ;end
intcanwup: ;Wake-up on interrupt
bcf PIR3,WAKIF ;Clear the interrupt flag
bra intloc ;end
;-----------------------------------;
canrecived: ;
ledgrn
movlb 0x0f ;bank 15
bcf CANCON,1,1 ;
bcf CANCON,2,1 ;
bcf CANCON,3,1 ;
iorwf CANCON,F,1 ;
btfss RXB0CON,RXFULL,1 ;
return ;нет данных.
btfsc RXB0CON,RXRTRRO,1 ;
bra canrecend ;не тот тип сообщения.
movlw 0x07 ;
cpfseq RXB0DLC,1 ;
bra canrecend ;неверная длина сообщения.
;-----------------------;
canrsrch: ;
lfsr 1,bftr ;загрузка указателя на буффера передатчиков.
canrsrch0:
btfsc INDF1,7 ;занят ?
bra canrsrch1 ;да.
bsf INDF1,7 ;занять буфер.
bsf INDF1,2 ;CAN+
bra canrecdat ;end
canrsrch1: ;
movlw 0x08 ;
addwf FSR1L,F ;
btfss fc ;=256
bra canrsrch0 ;
bra canrecend ;нет свободных буферов.
;-----------------------;
canrecdat: ;копирование сообщения в буфер.
incf FSR1L,F ;
movff RXB0D0,INDF1 ;
incf FSR1L,F ;
movff RXB0D1,INDF1 ;
incf FSR1L,F ;
movff RXB0D2,INDF1 ;
incf FSR1L,F ;
movff RXB0D3,INDF1 ;
incf FSR1L,F ;
movff RXB0D4,INDF1 ;
incf FSR1L,F ;
movff RXB0D5,INDF1 ;
incf FSR1L,F ;
movff RXB0D6,INDF1 ;
canrecend:
bcf RXB0CON,RXFULL,1 ;Clear Buffer.
movff tcancon,CANCON ;
movlb 0x00 ;
return ;
;-----------------------------------;
cansrch:
lfsr 1,bftr ;загрузка указателя на буффера передатчиков.
cansrch0:
btfss INDF1,7 ;занят ?
bra cansrch1 ;нет.
btfss INDF1,5 ;CAN send ?
bra cansrch1 ;нет.
bra cantransmit ;нашли.
cansrch1:
movlw 0x08 ;
addwf FSR1L,F ;
btfss fc ;=256
bra cansrch0 ;
bcf PIE3,TXB0IE ;Disable Interrupt
return ;
cantransmit:
ledred
bcf INDF1,5 ;CAN обработал.
btfss INDF1,6 ;UART еще не обработал ?
bcf INDF1,7 ;освободить буфер.
;данные.
incf FSR1L,F ;
movff INDF1,TXB0D0;
incf FSR1L,F ;
movff INDF1,TXB0D1;
incf FSR1L,F ;
movff INDF1,TXB0D2;
incf FSR1L,F ;
movff INDF1,TXB0D3;
incf FSR1L,F ;
movff INDF1,TXB0D4;
incf FSR1L,F ;
movff INDF1,TXB0D5;
incf FSR1L,F ;
movff INDF1,TXB0D6;
;идентификатор.
movff canadr3,TXB0SIDH ;адрес устройства.
movff canadr2,TXB0SIDL ;
movff canadr1,TXB0EIDH ;
movff canadr0,TXB0EIDL ;
;передать 7 байт ;
bcf PIR3,TXB0IF ;Clear the interrupt flag
movlb 0x0f ;bank 15
movlw 0x07 ;7=bytes
movwf TXB0DLC,1 ;long message
clrf TXERRCNT,1 ;сброс ошибок передатчика.
bsf TXB0CON,TXREQ,1 ;Start Transmit
movlb 0x00 ;bank 0
return ;


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

Ответы


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

Сообщение:

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

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

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

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