This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我的客户正在其固件中开发 SCI 通信代码、但无法正常工作。
您能否提供解决问题的建议? 下面对这些现象进行了说明。
- F28377S 通过 SCI 与客户系统中的其他部分进行通信。
- F28377S 向另一部分发送多个数据包,接收器可以接收消息。
-接收器向 F28377S 发送数据包,RX 引脚波形看起来正确。 然后"H"电平大约为3.3V、"L"电平大约为0V。
-他们的软件可以注意检测 RX 的中断、而 F28377S 无法接收来自接收器的消息。
-启用回路模式时、中断标志置为有效、F28377S 可以接收来自接收器的消息。
我随附了与寄存器设置相关的代码。 请参阅随附的 temp.c 文件。
如果您需要更多信息来解决这个问题、PLS 会告诉我。
e2e.ti.com/.../temp.c
此致、Taki
您好、Taki、
感谢您的提问! 我对原始帖子中附加的代码确实有一个问题、但需要更多的源代码才能进一步调试。 具体而言、第12行至第15行具有函数"GPIO_SetupPinMux"和"GPIO_SetupPinOptions"。 为了确保这些函数正常工作、如果这些函数已从我们的 C2000Ware 示例函数中进行更改、您能否提供这些函数的代码?
此处的代码片段:
GPIO_SetupPinOptions (56、GPIO_output、GPIO_Async); GPIO_SetupPinOptions (57、GPIO_input、GPIO_PushPull);
我的问题是 GPIO_SetupPinOptions 函数似乎设置了 Async 和 PushPull、它们是芯片上的不同设置。
建议对 RX 使 GPIO 鉴定异步、但也建议将其设置为推挽。 这两个值都应设置(如下面的 C2000Ware 示例所示):
// GPIO28是 SCI Rx 引脚。 //
(笑声) GPIO_setPadConfig (28、GPIO_PIN_TYPE_STD); //这会将 RX 设置为推挽模式 GPIO_setQualificationMode (28、GPIO_Qual_异 步); //这将 RX 限定设置为 ASINCRHONOUS
(笑声)
请查看 "C2000Ware_##_##_##_##\f2837xs\examples\cpu1\sci\"中的 C2000Ware 示例 sci_ex1_loopback.c、以深入了解我们建议的初始化序列。
如果您能够提供这些详细信息以便进一步调试、请告诉我!
此致、
Vince
您好!
函数"GPIO_SetupPinMux"和"GPIO_SetupPinOptions"不会更改、并且附加在此线程中的 F2837xS_GPIO_c 会被替换。
根据您的建议尝试运行以下代码、但问题未得到解决。
GPIO_SetupPinOptions (56 、 GPIO_output、 GPIO_PushPull|GPIO_异 步);
GPIO_SetupPinOptions (57 、 GPIO_input 、 GPIO_PushPull|GPIO_异 步);
以下示例代码被参考以进行编码。
C2000Ware_2_01_00_00\device_support\f2837xs\examples\cpu01
Example_2837xSSci_FFDLB_int.c
e2e.ti.com/.../1057.F2837xS_5F00_Gpio.c
e2e.ti.com/.../Example_5F00_2837xSSci_5F00_FFDLB_5F00_int.c
此致、Taki
您好、Taki、
仔细查看代码后、我认为有一些建议可以帮助您:
这应该与原始 test.c 文件中的以下内容类似:
void init (void) { InitSysCtrl(); //*** moved*** initGpio(); GPIO_SetupPinMux (56,GPIO_MUX_CPU1,6);// CFƒJ ƒh§ŒäiRxDjš ƒh§ŒäiTxDj GPIO_SetupPinMux (57,GPIO_MUX_CPU1,6);// CFƒJ GPIO_SetupPinOptions (56,GPIO_output,GPIO_Async);// CFƒJ [ƒh§ŒäiTxDj GPIO_SetupPinOptions (57,GPIO_input,GPIO_PushPull);// CFƒJ ƒh§ŒäiRxDjš[GPIO// *** Inend PieIntr ( 0x0000 );0xInteInteTable (0x0000 = 0xINT) //***已添加*** SCI_performSoftwareReset (SCIA_BASE ); //*** End Added *** EALLOW;//需要此操作来写入 EALLOW 受保护的寄存 器 PieVectTable.SCIC_TX_INT=&SCIC_TX_ISR; &PieVectTable.SCIC_RX_INT= SCICT_REQ =0x000CLUSTRIS/ 停止 所有的循环;/循环= 0xICTR_SCICTRIS.CLIC.0X000/循环 //TX、RX 使能、内部 SCK clk、ERR、SLEEP、TXWAKE 禁用 ScicRegs.SCICT2.bit.TXINTENA=1;//TX int 禁用 ScicRegs.SCICT2.bit.RXBUKINTENA=1;//RX int 启用 RegicRegs.SCIHBAUD.ALL=( u.SCICRET.002.bit) TXŠ„‚螂݂ÍFIFO‚ª15ˆÈ‰º‚Å ;/TXCFRICT.USCI.USC=0X.USTRF=0X=0X.USTRF=0X.US.USC=0X.US.USC=0X.USC=0X.CLUS.US.US.CLUS.US.US.US.CLUS.US.US.US_CLUS.US.CLUS.US.CLUS.CLUS.US.US.CLUS_CLUS=0X=0x00.CLUS.CLUS.CLUS.CLUS.CLUS.CLUS.CLUS.CLUS.CLUS.CLUS=0X.US.CLUS.CLUS.CLUS.CLUS.CLUS.CLUS.CLUS. ƒtƒgƒEƒFƒAƒŠƒZƒbƒg SCIƒ¶RXŠ„‚螂݂ÍFIFO‚ª1ˆÈã‚Ŷ //TX FIFOƒŠƒZƒbƒg ScicRegs.SCIFFRX.bit.RXFIFORESET=1;//RX FIFOƒŠƒZƒbƒg //***已添加*** SCI_resetChannels (SCIB_BASE);//重置 SCIFFTX.SCIRST SCI_performSoftwareReset (SCIB_BASE);//clear TXRDY and RXRDY_BRKDT (由 SCICTL*。SWRESET 提供) SCI_enableModule (SCIB_BASE);//在 CTL 寄存器中启用 RX、TX 和 SCI SCI_performSoftwareReset (SCIB_BASE);//reset SCI with SCICTL*。SWRESET SCI_enableInterrupt (SCIA_BASE、SCI_INT_TXRDY | SCI_INT_RXRDY_BRKDT);//启用 SCI_INT_TXRDY 和 SCI_INT_RXRDY_BRKDT //***已添加结束*** //现在可以在 PIE 块 PieCtrlRegs.PIECTRL.bit.ENPIE = 1中启用中断;//启用 PIE 块 PieCtrlRegs.PIEIER8.bit.INTx5=1; PieCtrlRegs.PIEIER8.bit.INTx6=1; IER|=M_Interrupt 8;*Interrupt 8 (*中断组);*中断组8 (***) //acknowledge Group //**End Added *** EINT; ERTM;//启用全局实时中断 DBGM }
我强烈建议使用最新版本的 C2000Ware (3.02.00.00)、因为该线程中提供的版本已经是少数旧版本(2.01.00.00)、并且可能自那时以来已经实现了一些修复!
请告诉我上述建议是否有助于解决您的问题!
此致、
Vince
您好、Vince
客户 已根据您的建议进行调试、从而解决了该问题。
他们感谢您为他们提供的所有帮助。
他们告诉我根本原因是 RTS 和 CTS 是在其原始代码中实现的。
我认为他们的代码可能会在读取接收到的数据之前等待 CTS 信号。
总之、非常感谢您的帮助。
此致、Taki