如何写入通过UART0接收和发送的中断

时间:2014-12-12 12:17:16

标签: c interrupt lpc

我正在使用我的uC LPC2478。我正在研究UART0功能。 但我需要制作UART0功能。 我不知道中断,如何使用!

我尝试发送一个长字符串,它应该收到一个长字符串。 但它不起作用。但是我需要写函数__irq void isr_UART0(void)???

    >     void initUART0 (void)
    >     {
    >       PCONP   |= (1 << 3);                 /* Enable UART0 power                */
    >     
    >       PINSEL0 &= ~0x000000F0;
    >       PINSEL0 |= 0x00000050;
    >     
    >       U0FDR    = 0;                          /* Fractional divider not used       */
    >       U0LCR = 0x83;                       /* 8 bits, no Parity, 1 Stop bit       */
    >       U0DLL = 10;                          /* 115200 Baud Rate @ 12MHz PCLK Clock */
    >     
    >       U0DLM = 0;
    >       U0LCR = 0x03;                       /* DLAB = 0                            */
    >       
    >       U0IER = 0;
    >       
    >       VICVectAddr6 = (U32)isr_UART0;     /* Set Interrupt Vector                */
    >       VICVectCntl6 = 15;                   /* use it for UART1 Interrupt          */
    >       VICIntEnable  = (1  << 6);          /* Enable Interrupt                    */
    >       
    >       U0IER = 0x03;
    >     }
    > 
    >     void sendToUART0 (char *data, int len)
    >     {
    >       int i;
    >       
    >       while (!(U0LSR & (1 << 5)));
    >       for (i = 0; i < len; i++)
    >       {
    >           U0THR = *data;
    >           data++;
    >       }
    >     }
    > 
    >     void readDataAtUART0 (char *ch) { 
    >       //while (!(U0LSR & 0x01));  
    >        while (!(U0LSR & (1 << 0))); 
    >        *ch = U0RBR; 
    >     }
    > 
    >     /* UART1 receive ISR
    >     ******************************************************** */
    >     __irq void isr_UART0 (void) {     
    >       // readDataAtUART0();
    > 
    >               // read and assign the received data 
           VICVectAddr = 0;              /* Acknowledge Interrupt   */ 
    >      }

1 个答案:

答案 0 :(得分:0)

'但是它不起作用'对你的问题是一个非常糟糕的描述,所以-1无论如何。

'readDataAtUART0();'与'void readDataAtUART0(char * ch)'的签名不匹配,因此此代码将无法编译。中断处理程序没有进程或线程上下文,因此您必须求助于至少一个全局变量以允许处理程序进行通信 - 在您的情况下,是一个数组指针。

TX中断有点尴尬,因为U0THR可能需要“启动”第一个字符才能发送。这可能很尴尬,需要禁用tx中断来检查U0THR是否已清空前一个缓冲区内容的最后一个字符。

只需编译代码然后让rx处理程序先运行。