8324|21

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

请教一个关于LM4F232串口发送中断问题 [复制链接]

在使用利尔达的M4开发板时使用UART1串口进行中断接收和中断发送,但是发送不会进入中断程序,程序只会将缓冲里面第一个字节发送出去后就完事了,中断接收则正常。下面是配置程序:

    //
    // 配置Uart引脚,(PA0、PA1)
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);

 // 使能处理器总中断
 //
 IntMasterEnable();

    // 设定PC4、PC5
    //
 GPIOPinTypeUART(GPIO_PORTC_BASE, GPIO_PIN_4 | GPIO_PIN_5);
 GPIOPinConfigure(GPIO_PC4_U1RX);
 GPIOPinConfigure(GPIO_PC5_U1TX);
//---------------------------GPIP口配置-------------------------------//


//---------------------------串口配置115200 N81-------------------------------//
    //
    // 配置UART到115200,8-N-1
    //
    UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 115200,
                            (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
                             UART_CONFIG_PAR_NONE));

 
 UARTIntRegister(UART1_BASE, UART1TXIntHandler);
 UARTIntRegister(UART1_BASE, UART1RXIntHandler);
 UARTIntClear(UART1_BASE, UART_INT_TX); 
 UARTIntEnable(UART1_BASE, UART_INT_TX);
 UARTIntEnable(UART1_BASE, UART_INT_RX | UART_INT_RT);
 //
 // 使能UART中断
 //
 IntEnable(INT_UART1);

调试一天了,不知道怎么回事,有人知道吗?

最新回复

你的问题解决了吗? 我的好像也有问题,程序设定波特率9600,主机请求命令容易响应错误;但是波特率改到14400却没有问题,怎么办,求解决?  详情 回复 发表于 2015-6-9 23:06
 
点赞 关注(1)

回复
举报

1803

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

回复 楼主 yg1982720 的帖子

单步看看一看寄存器,相关标志位是否置位了。
发送中断应该和接收中断是一个入口。
在进入中断以后,来判断具体是哪个中断。
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

板凳
 
楼主的目的是想把发送缓冲区里的数据连续的发送出去吗?
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 板凳 蓝雨夜 的帖子

我是想把一个缓冲数组里面的数用发送中断连续发送出去,用查询可以实现,但是改成中断后,发现只有第一个字节发送出去后,并没有触发发送中断而继续发后面的数据
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

5
 

回复 4楼 yg1982720 的帖子

FIFO深度有要求吗?
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

6
 
1字节深度就行
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

7
 
你发送缓冲区的数据在发送中断里有是否到了缓冲区尾了,如果不是有继续往发送缓冲区送数据吗?
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

8
 
我不知道我理解的对不对,我是先发送第一个字节,等发送FIFO空时,就可以触发一次中断,发送中断里面再填充发送数据到FIFO,直到缓冲数组里面全部发送完毕最后一次进中断不再填充数据。现在我的问题是一次发送中断也没进入。
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

9
 
哦!这样的
呵呵,想想办法,我还没做uart的实验!
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

10
 
startup.s文件修改了吗?
中断函数
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 10楼 蓝雨夜 的帖子

两种方法都试过了,还是没用。
1.使用库函数注册UARTIntRegister(UART1_BASE, UART1TXIntHandler);
2.修改启动文件startup.s,增加EXTERN  UART1TXIntHandler和DCD     UART1TXIntHandler; UART1 Rx and Tx
 
 
 

回复

1万

帖子

16

TA的资源

版主

12
 

发送的FIFO也设一位?

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

13
 
接收可以进入中断吗??

fpu开启来了吗?
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

14
 

用这个例子试下uart0看看

 

[ 本帖最后由 蓝雨夜 于 2012-2-29 09:25 编辑 ]

uart_echo.rar

205.73 KB, 下载次数: 54

 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

15
 

回复 12楼 ddllxxrr 的帖子

昨晚找到原因,确实因为自己看程序不仔细,一直以为自己配置的FIFO未使能用的1位发送FIFO,后来发现TI那个串口库函数最后使能串口那个函数里面,使能了FIFO而导致发送数据小于1/2FIFO深度才能触发而不是我想的1个字节后就触发。

UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 115200, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); 这个函数就是配置串口的,如果只看到里面这个位置就以为未使能FIFO,

// // Set parity, data length, and number of stop bits. //

HWREG(ulBase + UART_O_LCRH) = ulConfig; // // Start the UART. //

 

其实函数最后一句(UARTEnable(ulBase); )打开了FIFO,我把里面打开FIFO的操作屏蔽就好了

void UARTEnable(unsigned long ulBase)

{

 // // Check the arguments. //

ASSERT(UARTBaseValid(ulBase));

// // Enable the FIFO. //

//HWREG(ulBase + UART_O_LCRH) |= UART_LCRH_FEN;

// // Enable RX, TX, and the UART. //

HWREG(ulBase + UART_O_CTL) |= (UART_CTL_UARTEN | UART_CTL_TXE | UART_CTL_RXE); }

[ 本帖最后由 yg1982720 于 2012-2-29 13:53 编辑 ]

点评

这个文件怎么打开 加了ROM_UARTFIFODisable(UART1_BASE)[/backcolor] 一样吗?  详情 回复 发表于 2014-10-30 21:16
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

16
 

回复 14楼 蓝雨夜 的帖子

另外非常谢谢蓝雨夜的热心帮忙!
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

17
 

回复 16楼 yg1982720 的帖子

嘿嘿
互相学习
 
 
 

回复

400

帖子

0

TA的资源

五彩晶圆(中级)

18
 
你的中断缓冲设置大了,发了一个字节不会触发中断
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

19
 

波特率设为9600收不到数据的问题

现在我用开发板(LM4F232)和串口调试助手通信,上电后开发板向串口助手发送一帧数据,可以发现串口助手收到的数据是正确的,程序中波特率设置的是115200,在串口助手中不管波特率设为多少,收到的数据都是正确的。现在我将程序中的波特率改为其他数值,比如9600或者4800,将串口助手的波特率等参数都设得和程序中的一样,却收不到数据。
波特率设置函数UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 115200,
                            (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
                             UART_CONFIG_PAR_NONE));
时钟配置函数ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_OSC| SYSCTL_OSC_MAIN |SYSCTL_XTAL_16MHZ);
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(中级)

20
 
yg1982720 发表于 2012-2-29 13:35
昨晚找到原因,确实因为自己看程序不仔细,一直以为自己配置的FIFO未使能用的1位发送FIFO,后来发现TI那个 ...

这个文件怎么打开
加了ROM_UARTFIFODisable(UART1_BASE) 一样吗?




 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表