本例实现通过中断来使用串口,流程:在程序中调用printf,它把数据放在DDR内存中的一个buffer中;使用6410的FIFO中断,当FIFO中的数据少于64位的时候(就是还没满),产生一个中断信号给CPU,在中断处理中从buffer中发送到FIFO中,当满后就不管,未满又产生一个中断。
这里涉及到一个概念:环形缓冲区
char buff[10];
a、空:R==W
b、放入数据 buff[W]=val; W=(W+1)%10;
c、取出数据 val=buff[R]; R=(R+1)%10;
d、满 (W+1)10==R
R,W 代表读和写的指针。
代码:对应 22th_uart_irq
1>irq.c 加入uart的中断
这里涉及到一个概念:环形缓冲区
char buff[10];
a、空:R==W
b、放入数据 buff[W]=val; W=(W+1)%10;
c、取出数据 val=buff[R]; R=(R+1)%10;
d、满 (W+1)10==R
R,W 代表读和写的指针。
代码:对应 22th_uart_irq
1>irq.c 加入uart的中断
void uart_irq(void)
{
/* 调用具体的中断处理函数 */
do_uart_irq();
/* 清中断 */
VIC1ADDRESS = 0;
}
void uart_irq_init(void)
{
VIC1INTENABLE |= (1<<5); /* bit5: int_uart0 */
VIC1VECTADDR5 = uart_irq;
}
2>uart.c
#define ENABLE_FIFO 1
static void delay(void)
{
volatile int i = 10;
whi