gpt4 book ai didi

c - 如何编写UART0接收和发送中断

转载 作者:行者123 更新时间:2023-11-30 19:44:45 24 4
gpt4 key购买 nike

我正在使用我的 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。

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

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

只需编译代码,然后首先让 rx 处理程序工作。

关于c - 如何编写UART0接收和发送中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27443504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com