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.

[参考译文] TMS320F28335:串行通信.. SCITXDA &SCIRXDA--Example 9_4 (接收不工作)

Guru**** 1677530 points
Other Parts Discussed in Thread: C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1402574/tms320f28335-serial-communication-scitxda-scirxda---example-9_4-receiving-is-not-working

器件型号:TMS320F28335
Thread 中讨论的其他器件:C2000WARE

工具与软件:

尊敬的 TI 成员:

我正在测试 TI F28335手册中的示例9_4、我无法通过在终端上插入文本"texas"来接收数据字符串("instruments")。 下面给出了模块9示例及其示例代码:

代码:  

//
//      Lab9_4: TMS320F28335
//      (c) Frank Bormann
//
//###########################################################################
//
// FILE:	Lab9_4.c
// 
// TITLE:	DSP28 SCI - Communication to PC - Terminal
//			SCI-Setup: 9600 Baud, 8 Bit , ODD Parity , 1 Stopbit	
//			SCI - TX and RX - Interrupt are used in this Lab 
//			SCI - TX and RX - FIFO are used in this Lab
//			DSP waits for "Texas" and answers with "Instruments"
//			Watchdog active , serviced solely in main-loop 
//###########################################################################
//  Ver | dd mmm yyyy | Who  | Description of changes
// =====|=============|======|===============================================
//  3.0 | 08 Jul 2009 | F.B. | adapted for ControlCard28335 @ 20MHz
//  3.1 | 15 Nov 2009 | F.B  | Lab9_4 for F28335 @30MHz and PE revision 5
//###########################################################################
#include "DSP2833x_Device.h"
#include <string.h>
  
// External Function prototypes
extern void InitSysCtrl(void);
extern void InitPieCtrl(void);
extern void InitPieVectTable(void);

// Prototype statements for functions found within this file.
void Gpio_select(void);
void SCIA_init(void);
interrupt void SCIA_TX_isr(void);	 // SCI-A Transmit Interrupt Service
interrupt void SCIA_RX_isr(void);	 // SCI-A Receive  Interrupt Service

// Global Variables
char message[]={" Instruments! \n\r"};

//###########################################################################
//						main code									
//###########################################################################
void main(void)
{
	InitSysCtrl();	// Basic Core Initialization
					// SYSCLK=150MHz, HISPCLK=75MHz, LSPCLK=37.5MHz
	EALLOW;
   	SysCtrlRegs.WDCR= 0x00AF;		  // Re-enable the watchdog 
   	EDIS;			// 0x00E8  to disable the Watchdog , Prescaler = 1
   					// 0x00AF  to NOT disable the Watchdog, Prescaler = 64
	
	Gpio_select();	// GPIO9, GPIO11, GPIO34 and GPIO49 as output
					// to 4 LEDs at Peripheral Explorer			
	
	InitPieCtrl();		// default status of PIE; in DSP2833x_PieCtrl.c
	
	InitPieVectTable(); // init PIE vector table; in DSP2833x_PieVect.c
	
	// re-map PIE - entry for SCI-A-TX and SCI-A-RX
	EALLOW;  
   	PieVectTable.SCITXINTA = &SCIA_TX_isr;
	PieVectTable.SCIRXINTA = &SCIA_RX_isr;
   	EDIS;    
   		
   	SCIA_init();  // Initalize SCI 
   
    // Enable SCI-A TX Interrupt Group9 interupt 2
	PieCtrlRegs.PIEIER9.bit.INTx2 = 1;
	// Enable SCI-A RX Interrupt Group9 interupt 1
	PieCtrlRegs.PIEIER9.bit.INTx1 = 1;


	// Enable INT9 for SCIA-TX and SCIA-RX:
    IER = 0x100;
    
	// Enable global Interrupts and higher priority real-time debug events:
   	EINT;   // Enable Global interrupt INTM
   	ERTM;   // Enable Global realtime interrupt DBGM
   	
	while(1)
	{    
	  	EALLOW;
		SysCtrlRegs.WDKEY = 0x55;			// Service watchdog #1
		SysCtrlRegs.WDKEY = 0xAA;			// Service watchdog #2
		EDIS;
	}
} 	

void Gpio_select(void)
{
	EALLOW;
	GpioCtrlRegs.GPAMUX1.all = 0;			// GPIO15 ... GPIO0 = General Puropse I/O
	GpioCtrlRegs.GPAMUX2.all = 0;			// GPIO31 ... GPIO16 = General Purpose I/O
	
	GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;	// SCIRXDA
	GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;	// SCITXDA	
	
	GpioCtrlRegs.GPBMUX1.all = 0;			// GPIO47 ... GPIO32 = General Purpose I/O
	GpioCtrlRegs.GPBMUX2.all = 0;			// GPIO63 ... GPIO48 = General Purpose I/O
	GpioCtrlRegs.GPCMUX1.all = 0;			// GPIO79 ... GPIO64 = General Purpose I/O
	GpioCtrlRegs.GPCMUX2.all = 0;			// GPIO87 ... GPIO80 = General Purpose I/O
	 
	GpioCtrlRegs.GPADIR.all = 0;
	GpioCtrlRegs.GPADIR.bit.GPIO9 = 1;		// peripheral explorer: LED LD1 at GPIO9
	GpioCtrlRegs.GPADIR.bit.GPIO11 = 1;		// peripheral explorer: LED LD2 at GPIO11

	GpioCtrlRegs.GPBDIR.all = 0;			// GPIO63-32 as inputs
	GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;	// peripheral explorer: LED LD3 at GPIO34
	GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1; // peripheral explorer: LED LD4 at GPIO49

	GpioCtrlRegs.GPCDIR.all = 0;			// GPIO87-64 as inputs
	EDIS;
} 

void SCIA_init()
{    
   	SciaRegs.SCICCR.all =0x0027;   	// 1 stop bit,  No loopback 
                                   	// ODD parity,8 char bits,
                                   	// async mode, idle-line protocol
	SciaRegs.SCICTL1.all =0x0003;  	// enable TX, RX, internal SCICLK, 
                                   	// Disable RX ERR, SLEEP, TXWAKE
	
	// SYSCLOCKOUT = 150MHz; LSPCLK = 1/4 = 37.5 MHz
	// BRR = (LSPCLK / (9600 x 8)) -1
	// BRR = 487  gives 9605 Baud
	SciaRegs.SCIHBAUD    = 487 >> 8;		// Highbyte
	SciaRegs.SCILBAUD    = 487 & 0x00FF;	// Lowbyte

	SciaRegs.SCICTL2.bit.TXINTENA = 1; 		// enable SCI-A Tx-ISR
	SciaRegs.SCICTL2.bit.RXBKINTENA = 1; 	// enable SCI_A Rx-ISR

	SciaRegs.SCIFFTX.all = 0xC060;	// bit 15 = 1 : relinquish from Reset
									// bit 14 = 1 : Enable FIFO
									// bit 6 = 1 :  CLR TXFFINT-Flag
									// bit 5 = 1 :  enable TX FIFO match
									// bit 4-0 :  TX-ISR, if TX FIFO is 0(empty) 
	SciaRegs.SCIFFCT.all = 0x0000;	// Set FIFO transfer delay to 0
	
	SciaRegs.SCIFFRX.all = 0xE065;	// Rx interrupt level = 5

	SciaRegs.SCICTL1.all = 0x0023;	// Relinquish SCI from Reset 
}  

// SCI-A Transmit Interrupt Service
interrupt void SCIA_TX_isr(void)	 
{
	unsigned int i;
	// copy 16 character into SCI-A TX buffer
	for(i=0;i<16;i++) SciaRegs.SCITXBUF= message[i];
	// Acknowledge this interrupt to receive more interrupts from group 9
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;  
}

// SCI-A Receive Interrupt Service
interrupt void SCIA_RX_isr(void)
{
	int i;
	char buffer[16];
	for (i=0;i<16;i++) buffer[i]= SciaRegs.SCIRXBUF.bit.RXDT;
	
	if (strncmp(buffer, "Texas", 5) == 0)
	{
		SciaRegs.SCIFFTX.bit.TXFIFOXRESET =1;  // enable TXFIFO
		SciaRegs.SCIFFTX.bit.TXFFINTCLR = 1 ;  // force TX-ISR		
	}
	 	
	SciaRegs.SCIFFRX.bit.RXFIFORESET = 0;	// reset RX-FIFO pointer  
	SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;	// enable RX-operation
	SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;    // clear RX-FIFO INT Flag
	PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;  
}

//===========================================================================
// End of SourceCode.
//===========================================================================

结果窗口如下所示:键入" TExaS "、然后按 Enter、我在终端...中不接收"Instruments" 这是一个问题:

请提出相应建议。

谢谢

此致

Arsalan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Arsalan:

    • 您能否提供指向您的 Lab 9_4文档和来源的链接? 我在我们当前的 Academy 存档中没有看到该实验。
    • 您是否根本输入了 SCI TX 和 RX ISR? 你能在那里设置断点进行确认吗?
    • 您是否能够测试  C2000Ware SDK device_support  SCI  回显示例并成功接收?
    • 您是否为此使用了 F28335 controlCARD? 您能否检查开关1位于哪个位置?

    此致、

    Allison

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Allison Nguyen:

    感谢您的答复。

    我移回一个示例 SCI 回显、以检查我是否从终端接收到字符。

    我在示例中看到的第一个误差如下所示:

    记住。 此处 SW1打开(对于 UART 到 USB 连接、没有将 DB 9连接到接头 GPIO28/29)。

    代码:  

    请建议解决此错误。  

    谢谢

    此致

    Arsalan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Arsalan:

    关于映像中的第一个错误、我在导入和编译工程时未看到该错误。 您是否要对此 ePWM 示例进行修改? 或者您是否是说您将其"开箱即用"导入、但不能在 CCS 中正确构建?

    第二、为了澄清您是否认为您能够成功运行回声示例? 或者、您在未对其进行修改的情况下我们的 SCI 回显示例是否存在问题?

    此致、

    Allison

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Allison、

    感谢您的答复。

    我直接导入了项目、而不是在 ePWM 示例上运行。 构建错误已删除或最终消失。 此问题现已解决。 下一步、我运行仿真并使用"终端上写入的一些字符检查串行终端:"Hello World..." 输入字符..."。 这意味着传输正常。 现在,当我写一个 字符"a"或任何字符或单词。 然后按 发送 按钮(请见下图... "发送"窗口)。 在终端上无法看到它。 我认为 DSP 没有收到字符"A"、这就是为什么在终端屏幕上看不到它的原因。  

    请记住 SW1已打开(UART 到 USB 通信…… 此处未连接 DB)。 请建议解决此问题。

    如此处所示:我还可以使用 CCS 终端对其进行验证。 通过键入字符"AAA" 、然后按 Enter、终端屏幕上没有显示任何内容。 看起来是(DSP 未接收字符)。  通过终端发送字符时、SCIA 寄存器值没有变化。

    请建议解决此问题。

    此致

    Arsalan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Arsalan:

    由于硬件设置、这可能是另一个问题。 请查看此相关主题、了解它是否能够解决此问题:

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/817929/ccs-tms320f28335-sci-echo-back-rx-issues 

    此致、

    Allison

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Allison、

    感谢您的答复。

    它最终运行...(参见下图)。 此外,我分享的例子在我的第一个职位的开始上面工作非常好。 谢谢

    我非常感谢您和您的团队的支持。  

    此致

    Arsalan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Arsalan:

    很高兴听到它在工作-示例也是如此! 我现在将关闭该主题、但如果您遇到进一步的问题、可以随时打开另一个主题

    此致、

    Allison