Witam kolegów,
w trzecim tygodniu nad dsPIC30F6014A stanąłem nad problemem wymiany danych pomiędzy C i assemblerem.
Jest taki kawałek assemblerowy - problemy opisuję w kodzie:
Drugi dzień drążę instrukcję do MPASM, MPLAB C30 i inne związane z tematem, ale jakoś nie mogę tego rozwiązać
.
Pojedyncze dane int, char działają mi bez problemu w obie strony, tylko te stałe i tablice...
Z góry dziękuję za pomoc.
Pozdrawiam
Mariusz
w trzecim tygodniu nad dsPIC30F6014A stanąłem nad problemem wymiany danych pomiędzy C i assemblerem.
Jest taki kawałek assemblerowy - problemy opisuję w kodzie:
.include "p30fxxxx.inc"
.extern _RxBuf ; bufor danych zadeklarowany w C
.extern _RxPtr ; pointer do bufora jw.
.extern _curDat ; aktualna dana z UART w celach poglądowych
.weak _RXBUFSIZE ; zadeklarowana globalnie stała w C, żeby w razie
; konieczności nie poprawiać w wielu miejscach
; ale w kodzie poniżej zawsze widziana jest źle
;i od razu czyści mi się pointer _RxPtr
.equ RX, 20
; tak oczywiście działa dobrze, wpisanie zamiast '20'
; _RXBUFSIZE, też nie pomaga
.global __U2RXInterrupt
.section .text
__U2RXInterrupt:
push w0 ;Save w0
clr w0 ;Clear w0
mov.b U2RXREG, WREG ;Transfer received byte to w0
mov WREG, _curDat
mov _curDat, w0
; mov w0, _RxBuf[_RxPtr] ; <--- to chcę osiągnąć, ale nie potrafię tego
; zapisać tak, żeby MPASM przyjął
inc _RxPtr
mov _RxPtr,w0
; cp.b w0, #_RXBUFSIZE ; <--- _RXBUFSIZE zero zawsze
cp.b w0, #RX
bra lt, no_buff_roll
clr _RxPtr
no_buff_roll:
pop w0 ;Restore w0
bclr IFS1, #U2RXIF ;Clear the interrupt flag.
retfie ;Return from Interrupt
.end ;EOF
Drugi dzień drążę instrukcję do MPASM, MPLAB C30 i inne związane z tematem, ale jakoś nie mogę tego rozwiązać
Pojedyncze dane int, char działają mi bez problemu w obie strony, tylko te stałe i tablice...
Z góry dziękuję za pomoc.
Pozdrawiam
Mariusz