Witam.
Mam do oprogramowania AT90PWM3B.
Chce wysłać/odebrać (cokolwiek) przez USART.
Problem jest taki że w AVRstudio, podczas debugowania wszytko jest ok, tak jak chcę, ale po zaprogramowaniu procesora - nie chce dzialać.
Sądze ze wlaga RxC nie generuje przerwania - ale dlaczego to nie wiem (I; RxCIE; RxEN = 1)
- procedura obslugi przerwania RxC wywolana jako podprgram (poprzez rcall) dziala prawidlowo, ponad to procedura tak wywolana nie gasi RxC (dwie linijki do gaszenia RxC w programie)
moje pytanie:
#1 Co jest nie tak?
#2 Czy na pewno mozna ustwic flage RxC programowo?
#3 to raczej swiezy porcesor, czy mozliwe ze biblioteki do uC j/w nie bedą mialy za duzo z nim w spolnego? - uwzgledniając datasheeta wszytko powinno byc w porzadku, UCSRA,B i C a takze bity. Podkreslam ze AVRstudio mówi ze wszytko dziala Ok - ale ok niestety nie jest.
..procesorek ten, ma tez rozszerzenie USART: EUSART - o ktorym to malo wiem, wiec nie wiem ta w jakim stopniu przeszkadza ono standardowemu USARTowi. Podkreslam że AVRstudio mowi ze wsztko jest ok - podczas gdy ok nie jest.
Kod ASM:
Mam do oprogramowania AT90PWM3B.
Chce wysłać/odebrać (cokolwiek) przez USART.
Problem jest taki że w AVRstudio, podczas debugowania wszytko jest ok, tak jak chcę, ale po zaprogramowaniu procesora - nie chce dzialać.
Sądze ze wlaga RxC nie generuje przerwania - ale dlaczego to nie wiem (I; RxCIE; RxEN = 1)
- procedura obslugi przerwania RxC wywolana jako podprgram (poprzez rcall) dziala prawidlowo, ponad to procedura tak wywolana nie gasi RxC (dwie linijki do gaszenia RxC w programie)
moje pytanie:
#1 Co jest nie tak?
#2 Czy na pewno mozna ustwic flage RxC programowo?
#3 to raczej swiezy porcesor, czy mozliwe ze biblioteki do uC j/w nie bedą mialy za duzo z nim w spolnego? - uwzgledniając datasheeta wszytko powinno byc w porzadku, UCSRA,B i C a takze bity. Podkreslam ze AVRstudio mówi ze wszytko dziala Ok - ale ok niestety nie jest.
..procesorek ten, ma tez rozszerzenie USART: EUSART - o ktorym to malo wiem, wiec nie wiem ta w jakim stopniu przeszkadza ono standardowemu USARTowi. Podkreslam że AVRstudio mowi ze wsztko jest ok - podczas gdy ok nie jest.
Kod ASM:
.include "pwm3Bdef.inc"
.cseg
;=============================================================================
; Wektory przerwań
;-----------------------------------------------------------------------------
.set ResetPoint = INT_VECTORS_SIZE
.org 0x0000 rjmp ResetProcessor // RESET
.org URXCaddr rjmp UsartRxComplete ; USART, Rx Complete
.org UTXCaddr rjmp UsartTxComplete ; USART, Tx Complete
;-----------------------------------------------------------------------------
;=============================================================================
.org ResetPoint
ResetProcessor:
cli
ldi r16, Low(RAMEND) ; ustaw wskaznik stosu
out SPL, r16
ldi r16, High(RAMEND)
out SPH, r16
rjmp Main
;=============================================================================
; Main Code
;-----------------------------------------------------------------------------
Main:
rcall USART_Init
sei
Loop0:
lds r16,UCSRA
sbr r16,(1<<RXC)
sts UCSRA,r16
; rcall UsartRxComplete ; wywolanie procedury przerwania za pomocą call
rcall opoz
rjmp Loop0
;--------------
opoz:
ldi r16,40 ;x 20000 clk_cycle //for 8mhz: x 25ms
ldi XH,high(49999)
ldi XL, low(49999)
sbiw XL,1
brne PC-1
dec r16
brne PC-5
ret
;--------------
;=============================================================================
;=============================================================================
;=============================================================================
#define FOSC 8000000 // Clock Speed
#define BAUD 2400; 600; 900; 1200; 9600;
#define MYUBRR FOSC/16/BAUD-1
USART_Init:
;*** Set baud rate
ldi r17, high(MYUBRR)
ldi r16, low(MYUBRR)
sts UBRRH, r17
sts UBRRL, r16
;*** Set frame format: 8data, no parity & 2 stop bits
ldi r16, (0<<UMSEL0)|(0<<UPM0)|(1<<USBS)|(3<<UCSZ0)
sts UCSRC,r16
;*** Enable receiver and transmitter
ldi r16, (1<<RXCIE)|(0<<TXCIE)|(1<<RXEN)|(1<<TXEN)
sts UCSRB,r16 /**/
ret
UsartRxComplete:
;*** Get status and 9th bit, then data from buffer
lds r18, UCSRA
lds r17, UCSRB
lds r16, UDR0
;*** zgas przerwanie
cbr r20,(1<<RXC)
sts UCSRA, r20
; lsr r17
; andi r17, 0x01
;*** wl/wyl diode na PB3
in r16,PortB
ldi r17,(1<<PB3)
eor r16,r17
out PortB,r16
reti
UsartTxComplete:
reti