[En-Nut-Discussion] Receive-Interrupt with the Debug-Unit
Markus Dost
markus.dost at dr-clauss.de
Fri Oct 19 15:11:39 CEST 2012
Hi again,
I want to use the Debug-Unit of my EIR as a UART to receive chars by
interrupt with this piece of code:
#include <compiler.h>
#include <dev/board.h>
#include <sys/timer.h>
static void RS232_Receive(void *arg){
uint32_t csr = inr(DBGU_SR);
if(csr & US_RXRDY)
uint8_t Buffer8 = inr(DBGU_RHR); // read out the char
}
int main(void){
uint32_t RS232_Baud = 115200;
NutRegisterSysIrqHandler(&syssig_DBGU, RS232_Receive, 0); // Register DEBUG-UNIT interrupt handler.
outr(PMC_PCER, _BV(SYSC_ID)); // Enable DEBUG-UNIT
outr(PIOA_PDR, _BV(9) | _BV(10)); // Disable GPIO on UART tx/rx pins
outr(DBGU_CR, US_RSTRX | US_RSTTX | US_RXDIS | US_TXDIS); // Reset UART
outr(DBGU_IDR, 0xFFFFFFFF); // Disable all interrupts
outr(DBGU_BRGR, (NutGetCpuClock() / (8 * RS232_Baud) + 1)/2 ); // Set UART baud rate generator register
outr (DBGU_MR, US_CHMODE_NORMAL | US_PAR_NO); // Set UART mode to 8 data bits, no parity and 1 stop bit
outr(DBGU_CR, US_RXEN | US_TXEN); // Enable UART receiver and transmitter
outr(DBGU_IER, US_RXRDY); // Enable receiver interrupts
NutSysIrqEnable(&syssig_DBGU); // enable the interrupt-source
for(;;);
return 0;
}
When I try this app, the UART receives the sended characters but the
program doesn't go to the interrupt handler to read out the char. Did I
made a mistake with the registration of the handler or is the interrupt
source not enabled correctly?
Best regards,
Markus
-------------- next part --------------
#include <compiler.h>
#include <dev/board.h>
#include <sys/timer.h>
static void RS232_Receive(void *arg){
uint32_t csr = inr(DBGU_SR);
if(csr & US_RXRDY)
uint8_t Buffer8 = inr(DBGU_RHR);
}
int main(void){
uint32_t RS232_Baud = 115200;
NutRegisterSysIrqHandler(&syssig_DBGU, RS232_Receive, 0); // Register DEBUG-UNIT interrupt handler.
outr(PMC_PCER, _BV(SYSC_ID)); // Enable DEBUG-UNIT
outr(PIOA_PDR, _BV(9) | _BV(10)); // Disable GPIO on UART tx/rx pins
outr(DBGU_CR, US_RSTRX | US_RSTTX | US_RXDIS | US_TXDIS); // Reset UART
outr(DBGU_IDR, 0xFFFFFFFF); // Disable all interrupts
outr(DBGU_BRGR, (NutGetCpuClock() / (8 * RS232_Baud) + 1)/2 ); // Set UART baud rate generator register
outr (DBGU_MR, US_CHMODE_NORMAL | US_PAR_NO); // Set UART mode to 8 data bits, no parity and 1 stop bit
outr(DBGU_CR, US_RXEN | US_TXEN); // Enable UART receiver and transmitter
outr(DBGU_IER, US_RXRDY); // Enable receiver interrupts
NutSysIrqEnable(&syssig_DBGU); // enable the interrupt-source
for(;;);
return 0;
}
More information about the En-Nut-Discussion
mailing list