完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我正在使用PSoC5.4设计器,并使用UART创建了一个项目。
这个项目运转良好。直到我更改了项目设置中的分页属性。 我自己的代码只是C,没有修改汇编程序部分。 因此,我可以预期UARTUR1.ASM和UARTHAR1It.ASM是正确的,并且支持LMM。 当启用分页时,我看到UARTHAR11BRXCNT得到一个值。 但是uARTAR11ARX缓冲器填充了0x00。 我应该做些什么来让LMM与UART结合工作呢? 以上来自于百度翻译 以下为原文 I am using the psoc5.4 designer and created a project using an uart. This project was working fine. Until I changed the paging attribute in the project settings. My own code is only C I didn;t modify the assembler parts. So I may expect that the uart_1.asm and uart_1int.asm are correct and do support the LMM. When Paging is enabled I see the UART_1_bRxCnt getting a value. But the UART_1_aRxBuffer is filled with 0x00 What should I do to get the LMM working in combination with the uart. |
|
相关推荐
9个回答
|
|
你使用的是Geert Which PSoC装置吗?我假设它是CY8C29 ***设备。UART API在哪里使用?在中断程序中?还是主轮询循环?还是两者兼而有之?使用上下文保存和恢复宏吗?像这样的中断例程…保存上下文…LCALL…恢复上下文
以上来自于百度翻译 以下为原文 Hi Geert Which PSoC device did you use? LMM; I assumed it Cy8C29*** device. Where is use that UART API? In interrupt routine? or main polling loop? or both combined? Did you use context save and restore MACRO? like this in the interrupt routine ... PRESERVE_CPU_CONTEXT ... lcall _ISRC_TxComplete ... RESTORE_CPU_CONTEXT |
|
|
|
只要有可能,上传你的完整项目在这里,使用设计师的“档案项目”功能,所以我们都可以看看你的内部设置等。
以上来自于百度翻译 以下为原文 Whenever possible upload your complete project here, using Designer's "Archive Project" function, so we all can have a look at your internal settings etc. Bob |
|
|
|
我使用CY8C966 624PVXI
GG1111Y2013TestStudio软件 1兆字节 以上来自于百度翻译 以下为原文 I use the CY8C29666-24PVXI
|
|
|
|
我不使用FieldRycPub上下文
UART启用了IPEPT。接收是通过IMPUT完成的。 在我的C代码中,我检查了UARTHAR11BrxCONT。 包括UARTC。H函数空格UARTION 然而,我不能调试与ICE模块。因为我的PSoC是用塑料的其他部件连接的。 所以我无法连接到PSoC芯片。 以上来自于百度翻译 以下为原文 I do not use the PRESERVER_CPU_CONTEXT The uart is interupt enabled. Receiving is done by interupt. And in my C code I check the UART_1_bRxCont In include uartc.h function void uart_ontvangen(void) I am however not able to debug with the ICE module. Because my psoc is togetter with other components in plastic. So I can not connect to the psoc chip. |
|
|
|
基本上,在中断例程RAM段分配给中断RAM区域。这是第一个256字节,0到255字节。如果缓冲区没有中断RAM区域,则不能直接从中断程序访问它。所以,你必须调用这些保存/恢复宏。In TythIa中断(空){…保存上下文…调用用户进程;RealePycPuleValue}/ /用户回叫例程/ /空ISRCJUSEPROCESS(无效){//访问您的缓冲区…返回;}
以上来自于百度翻译 以下为原文 Basically, In the interrupt routine RAM segment assign to Interrupt RAM area. That is first 256 byte, 0 - 255 byte. If your buffer area is place without interrupt RAM area, you can't access with it directly from interrupt routine. So, you have to call these save/restore MACRO. in_the_interrupt(void) { ... PRESERVE_CPU_CONTEXT ... lcall _ISRC_UserProcess ;; CALL USER PROCESS ... RESTORE_CPU_CONTEXT } // USER CALL BACK ROUTINE // void ISRC_UserProcess(void) { // access your buffer ... return; } |
|
|
|
我需要修改UARTHAR1.ASM还是UARTHAR1It.ASM????
以上来自于百度翻译 以下为原文 Do I need to modify the uart_1.asm or uart_1INT.asm for that ??? |
|
|
|
我不使用一个自己的(C代码)内嵌程序。因此,从UARTARG1 1RXIISR没有像你描述的呼叫。也许这样的例行公事可以解决我的问题。(但我需要一个例子。如何实施这样的程序。
因为我只是一个PSoC开发的初学者。 以上来自于百度翻译 以下为原文 I am not using an own (C code) Interup routine. So from the _UART_1_RX_ISR there is no call like you describe. Maybe such a routine can be a workaround for my problem. (But then I need an example. how to implement such a routine.) Because I am just a beginner in PSOC development. |
|
|
|
好啊
这是我的CY8C9466的真正代码 对你有帮助。 ---------------------------------------------------------------------------------------------------------------------------------- 在Untual.ASM中 ---------------------------------------------------------------------------------------------------------------------------------- UARTARXRXYISR: @ PSoCuSuuleCooDeBydiy2@(不要改变这条线)。 ; -------------------------------------------- 在这个横幅下面插入一个C函数 -------------------------------------------- 保存上下文 拉塞尔 恢复上下文 -------------------------------------------- 将LCALL插入横跨该横幅的C函数 -------------------------------------------- @ pSoCuxUsCoEdEdEd@(不要改变这条线)。 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //这是Meal.C中的用户进程。 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 易失性字节RxFLAG,RxIdx,RxLen; 易失性字节RXBUF [UARTHUBUFIX大小]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //在这个例程中,STX代码0x02是记录的开始。 /CR代码0x0d是记录结束 //此例程仅处理文本数据0x20~ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 空隙ISRCXRXEADE(空隙)/接收数据就绪 {字节SS; 如果((uARTHARSTRXXSTATESUSER)和UARTHARXRXGRIGULY)和&和!(UARTHARSTRXXSTATUS()和UARTHARXRXY错误) {SS= UARTHESTRORXDATA(); 如果(SS==STX) {RxIDx=0;//如果启动文本:清除指针 } 否则如果(SS & gt;=’’)//如果文本数据 {RXBUF[RXIDX++]=SS;/SET缓冲区 如果(RxIDX & Gt;= UARTHI BUFZSIZE-1)/ /如果超过数据 {RXIDX=UARTHI BUFZSIZE-1; RxBuf[RxIDx]=0;/ /完全缓冲区 RXLIN=RXIDX; RxIDx=0; RxFLAG=1;/ /记录 } 否则如果(SS==CR)//如果文本结束 {if(rxIdx) {IF(RxIDX & Gt;= UARTHI BUFZSIZE-1)RXIDX=UARTHUB BUFZSIZE-1; RxBuf[RxIDx]=0;/ /完全缓冲区 RXLIN=RXIDX; RxIDx=0; RxFLAG=1;/ /记录 } } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 虚UARTH初始化(空) {UARTHARESTART(UARTHARPARIITY NODY);/奇偶奇偶 UARTHYNEABLIN(); UARTHI ItCNTL(UARTHARENABLE)RX中断/ /启用RX中断 } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 字节UARTHARE接收(字节RC[],字节SIZ) {字节LeN; 如果(!)RxFlag)返回0; 如果(SIZ & Gt;= UARTHI BUFZSIZE-1)SIZ= UARTHUB BUFZSIZE-1; Lee=RxLen; RXLEN=0; 如果(SIZ & lt;ln)Le= siz; STRNCPY(ReC,(CHAR *)RXBUF,LEN); RxFLAG=0; 归来; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 主(空) {字节SS,RC[UARTHUBUFIX大小]; UARTHI初始化(); 启用/中断全局中断 虽然(真) {if(SS=UARTHAL接收(REC,UARTHUB BUFIX大小)) { 用ReC[]做某事 } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 以上来自于百度翻译 以下为原文 OK This is a real code of my Cy8C29466 – UART Something help for you. ;------------------------------------------------------- ; In the UARTINT.asm ;------------------------------------------------------- _UART_RX_ISR: ;@PSoC_UserCode_BODY_2@ (Do not change this line.) ; ;--------------------------------------------------- ; Insert a lcall to a C function below this banner ;--------------------------------------------------- PRESERVE_CPU_CONTEXT lcall _ISRC_RxReady RESTORE_CPU_CONTEXT ;--------------------------------------------------- ; Insert a lcall to a C function above this banner ;--------------------------------------------------- ;@PSoC_UserCode_END@ (Do not change this line.) // //////////////////////////////////////////////////// // this is a user process in main.c // //////////////////////////////////////////////////// volatile byte RxFlag, RxIdx, RxLen; volatile byte RxBuf[UART_BUF_SIZE]; // //////////////////////////////////////////////////// // in this routine, STX code 0x02 is start of record // CR code 0x0D is end of record // this routine handle only text data 0x20 ~ // //////////////////////////////////////////////////// void ISRC_RxReady(void) // receive data ready { byte ss; if( (UART_bReadRxStatus()&UART_RX_REG_FULL) && !(UART_bReadRxStatus()&UART_RX_ERROR) ) { ss= UART_bReadRxData(); if( ss==STX ) { RxIdx= 0; // if start text: clear pointer } else if( ss>=' ' ) // if text data { RxBuf[RxIdx++]= ss; // set buffer if( RxIdx>=UART_BUF_SIZE-1 ) // if exceed data { RxIdx= UART_BUF_SIZE-1; RxBuf[RxIdx]= 0; // complete buffer RxLen= RxIdx; RxIdx= 0; RxFlag= 1; // record comleted } } else if( ss==CR ) // if end of text { if( RxIdx ) { if( RxIdx>=UART_BUF_SIZE-1 ) RxIdx= UART_BUF_SIZE-1; RxBuf[RxIdx]= 0; // complete buffer RxLen= RxIdx; RxIdx= 0; RxFlag= 1; // record comleted } } } } // /////////////////////////////////////////////////////////////////// void UART_Initialize(void) { UART_Start(UART_PARITY_ODD); // Parity Odd UART_EnableInt(); UART_IntCntl(UART_ENABLE_RX_INT); // Enable RX interrupts } // /////////////////////////////////////////////////////////////////// byte UART_Receive( byte rec[], byte siz ) { byte len; if( !RxFlag ) return 0; if( siz>=UART_BUF_SIZE-1 ) siz= UART_BUF_SIZE-1; len= RxLen; RxLen= 0; if( siz strncpy( rec, (char*)RxBuf, len ); RxFlag= 0; return len; } // /////////////////////////////////////////////////////////////////// int main(void) { byte ss, rec[UART_BUF_SIZE]; UART_Initialize(); M8C_EnableGInt; // enable global interrupts While(true) { if( ss=UART_Receive(rec, UART_BUF_SIZE) ) { // do something using rec[] } } } // /////////////////////////////////////////////////////////////////// |
|
|
|
感谢您的支持和样品代码。我已经发现,我的问题不是内存模型相关的问题。
以上来自于百度翻译 以下为原文 Thanks for your support and for the sample code. I found already that the issue I have is not memory model related. |
|
|
|
只有小组成员才能发言,加入小组>>
754个成员聚集在这个小组
加入小组2098 浏览 1 评论
1845 浏览 1 评论
3664 浏览 1 评论
请问可以直接使用来自FX2LP固件的端点向主机FIFO写入数据吗?
1782 浏览 6 评论
1532 浏览 1 评论
CY8C4025LQI在程序中调用函数,通过示波器观察SCL引脚波形,无法将pin0.4(SCL)下拉是什么原因导致?
556浏览 2评论
CYUSB3065焊接到USB3.0 TYPE-B口的焊接触点就无法使用是什么原因导致的?
410浏览 2评论
CX3连接Camera修改分辨率之后,播放器无法播出camera的画面怎么解决?
433浏览 2评论
379浏览 2评论
使用stm32+cyw43438 wifi驱动whd,WHD驱动固件加载失败的原因?
905浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 14:13 , Processed in 1.286808 second(s), Total 93, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号