完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在一个项目中,用CH559L的UART1进行只发不收(1s发送100次左右的数据串),?和能发能收(60s使能一次);
#define? uart1_EnRxd? IE_UART1=?1? ? ? ? ? ?// 开启 接收中断, 这个60s使能一次 #define? uart1_UnRxd? IE_UART1=0? ? ? ? ?// 关闭 接收中断, 收一次数据就关闭中断 void uart1_init() { unsigned int x; SER1_LCR |= bLCR_DLAB;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 停 设置屏蔽 SER1_DIV = 12; x = 10 * 12000000 * 2 / 12 / 16 / 115200;? ? ? ? ? ? ? ? ? ? ? ? ? // 默认时钟, 12分频, 115200bps if ( x % 10 >= 5) x += 10; x /= 10; SER1_DLM = x >> 8; SER1_DLL = x; SER1_LCR &= ~bLCR_DLAB;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 启 设置屏蔽 XBUS_AUX |= bALE_CLK_EN;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // UART 功能 SER1_LCR = bLCR_WORD_SZ1 | bLCR_WORD_SZ0;? ? ? ? ? ? ? // 8bit, NONE, 1stop SER1_IER = bIER_PIN_MOD1 | bIER_RECV_RDY;? ? ? ? ? ? ? ? ? ? // P2.6, P2.7, RDY这个中断是必须要使能吗, 不使能好像都不能发送 SER1_FCR = MASK_U1_FIFO_TRIG | bFCR_T_FIFO_CLR | bFCR_R_FIFO_CLR | bFCR_FIFO_EN;? ? ? ? // SER1_FCR = 0xC7 SER1_MCR = bMCR_OUT2; SER1_ADDR |= 0xff;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 点对点? } void UART1_Interrupt(void) interrupt INT_NO_UART1 using 1 ? ? ? ? ? ? ? ?//UART1中断服务程序,使用寄存器组1 { u8 _tmp = 0; u8 _int = SER1_IIR & 0x0f; // SER1_IIR 低4位, 组成7个中断标志 switch(_int){ case U1_INT_RECV_RDY:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 数据可用 中断 ? ? _tmp = UART1_Rxd(&UART1_RecBuff[CNT_Rxd1]);? ? //? 7位 FIFO 数据 ? ? CNT_Rxd1 += _tmp; ? ? FLAG_RecFull = 1;? ? ? ? ? ? ? ? ? ? ? break; case U1_INT_RECV_TOUT:? ? ? ?// 接收超时 中断? ? ? _tmp = UART1_Rxd(&UART1_RecBuff[CNT_Rxd1]);? ? ?// 1~6 位 FIFO 数据 ? ? CNT_Rxd1 += _tmp; ? ? FLAG_RecHalf = 1; break; case U1_INT_LINE_STAT://线路状态中断 break; case U1_INT_SLV_ADDR://设备地址match中断 break; case U1_INT_NO_INTER://无中断 break; case U1_INT_MODEM_CHG:? ? //MODEM中断 _tmp = SER1_MSR;? ? // 读 SER1_MSR 清中断 break; case U1_INT_THR_EMPTY:? ? //发送空中断,可以启动下次发送或者等待接收 break; default:? ? break; } } 发现的问题:
|
|
相关推荐
1个回答
|
|
SER1_IER;SER1_IIR;SER1_FCR;SER1_LCR;SER1_MCR;SER1_LSR;SER1_MSR; 这些寄存器,刚初始化是 "21 C4 C4 03 08 63 00"; 发送几次数据之后(UART1会收到返回值, 但因没开启中断, 所以不会响应数据)的值是 "21 C1 C1 03 08 60 00"
|
|
|
|
只有小组成员才能发言,加入小组>>
467 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2871 浏览 2 评论
2359 浏览 1 评论
810浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
633浏览 1评论
494浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
358浏览 1评论
632浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 18:52 , Processed in 1.260842 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号