完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨,大家好,
我正在使用一些ISR的UART UART SCB模式VER 3.2并使用下面的代码 UIT8标志=0; CysISR(UART中断) { UIT32源=0; 旗=1; UARTHUUARTPUSTSHIPE(“nFLAG=1 rn”); 源= uARTHEGETRXBASTUSTORKEASKASKED(); UARTHI CURLRX中断源(源); UARTHUUARTPTCCHAR(UARTHI UARTEGETCHARE()); /*’结尾’* } int() { utiN 32 CH; UARTHART START(); UARTHI SCBIIQL SARTEX(UART中断); //uARTHARRXIISRSARTEXTEX(UART中断); *通过UART**发送字符串 CyGloalActuabess;/*取消注释此行以启用全局中断。*/ UTARTUAUTARTPT字符串(“R************************************************************************************************************************************************************************************************************************************************************************************************************************************************** UARTHUUARTPUSTSHIPE(“UART IMAILISIDER RN”); (;) { CH=UARTHI UARTGETHARCH(); If(FLAG=1) { 旗=0; CH=UARTHI UARTGETHARCH(); UARTHI UARTARPTCHA(CH); UARTHUUARTPUSTSHIPE(“nFLAG=0 rn”); } } } 观察: 1。控制不是来自ISR“CysISR(UART中断)” 2。无法清除中断 请帮助 以上来自于百度翻译 以下为原文 Hi all, I am using some ISR for UART UART SCB Mode ver 3.2 and using the following code uint8 flag = 0; CY_ISR(uartInterrupt) { uint32 source = 0; flag = 1; UART_UartPutString("nFlag = 1rn"); source = UART_GetRxInterruptSourceMasked(); UART_ClearRxInterruptSource(source); UART_UartPutChar(UART_UartGetChar()); /* `#END` */ } int main() { uint32 ch; UART_Start(); UART_SCB_IRQ_StartEx(uartInterrupt); //UART_RX_ISR_StartEx(uartInterrupt); /* Transmit string through UART */ CyGlobalIntEnable; /* Uncomment this line to enable global interrupts. */ UART_UartPutString ("rn***********************************************************************************rn"); UART_UartPutString ("UART Initialisedrrn"); for (;;) { ch = UART_UartGetChar(); if(flag == 1) { flag = 0; ch = UART_UartGetChar(); UART_UartPutChar(ch); UART_UartPutString("nFlag = 0rn"); } } } Observation : 1. Control is not coming out from ISR "CY_ISR(uartInterrupt)" 2. Could not able to clear interrupt Please help |
|
相关推荐
3个回答
|
|
一般情况下:
不要在中断处理程序中使用冗长代码。与普通CPU速度相比,在UART上发送数据非常慢。 不要在中断处理程序中重复。如果你做了类似的事情,由于缺少一些信息,这并不十分清楚。 在中断处理程序中更改的每个全局变量都应该声明为“易失性”。所以你需要 挥发性UIT8标记=0; 这将阻止编译器优化对变量标志的冗余访问。请看这里。 能否请您发布您的完整项目,以便我们都可以看看您的所有设置。为此,使用 创建者-gt;文件& gt;创建工作区束(最小) 并附加生成的文件。 鲍勃 以上来自于百度翻译 以下为原文 Generally: Do not use lengthy code in an interrupt handler. Sending data over the UART is very slow compared to normal CPU speed. Do not recurse in an interrupt handler. It is not quite clear due to some missing information if you do something like that. Every global variable that is changed in an interrupt handler should be declared as "volatile". so you need volatile uint8 flag = 0; This will prevent you from compiler optimizing-out redundant accesses to the variable flag. See here. Can you please post your complete project so that we all can have a look at all of your settings. To do so, use Creator->File->Create Workspace Bundle (minimal) and attach the resulting file. Bob |
|
|
|
ncmza 发表于 2018-12-21 18:52 感谢答复和建议,我将改变代码作为易失性UIT8标志=0; SCBUUARCOMDE01.CYDSn.ZIP 2兆字节 以上来自于百度翻译 以下为原文 Thanks for reply and suggestion i will change in code as volatile uint8 flag = 0;
|
|
|
|
嗨,鲍伯 你能用附件来解决这个问题吗? 伪装 以上来自于百度翻译 以下为原文 Hi Bob Can you address the issue with ref to attached code? Sham |
|
|
|
只有小组成员才能发言,加入小组>>
754个成员聚集在这个小组
加入小组2100 浏览 1 评论
1846 浏览 1 评论
3665 浏览 1 评论
请问可以直接使用来自FX2LP固件的端点向主机FIFO写入数据吗?
1782 浏览 6 评论
1532 浏览 1 评论
CY8C4025LQI在程序中调用函数,通过示波器观察SCL引脚波形,无法将pin0.4(SCL)下拉是什么原因导致?
560浏览 2评论
CYUSB3065焊接到USB3.0 TYPE-B口的焊接触点就无法使用是什么原因导致的?
412浏览 2评论
CX3连接Camera修改分辨率之后,播放器无法播出camera的画面怎么解决?
433浏览 2评论
379浏览 2评论
使用stm32+cyw43438 wifi驱动whd,WHD驱动固件加载失败的原因?
905浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 23:17 , Processed in 0.914443 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号