Other Parts Discussed in Thread: TMS320F280025C
器件型号: TMS320F280025C
我正在处理 TMS320F280025C 控制器。 我真的想.. 通过 RS485 (SN65HVD485) 驱动器使用 SCI 传输数据 并检查上接收到的数据 Docklight 软件。
在控制器和 Docklight 设置中、参数均为: 9600 波特率、无奇偶校验、1 个停止位 。
我正在使用的器件 GPIO2 作为 TXD 和 GPIO3 作为 RXD 。
。 SYSCLK 为 100MHz 。
发送数据时 0x55 、Docklight 正确接收 0x55 。
但当我传输数据时 0x44 、Docklight 显示 0xD7 。
如果我传输任何其他值、接收到的数据总是错误的 仅正确接收 0x55 其他都不正确。
这是我的代码:
#include “f28x_project.h"</s>“
uint16_t 循环计数器= 0;
//函数原型
void initSCIAEchoback(void);
void transmitSCIAChar (uint16_t A);
void transmitSCIAMessage (unsigned char * msg);
void initSCIAFF(void );
//主要
void main (void)
{
uint16_t ReceivedChar;
无符号字符*msg;
//初始化器件时钟和外设
InitSysCtrl();
//初始化 GPIO
InitGpio();
//对于本示例、仅初始化 SCI-A 端口的引脚。
// GPIO_SetupPinMux ()-设置 GPxMUX1/2 和 GPyMUX1/2 寄存器位
// GPIO_SetupPinOptions ()-设置 GPIO 的方向和配置
//这些函数可在 F28X7x_gpio.c 文件中找到。
GPIO_SetupPinMux (3、GPIO_MUX_CPU1、9); //请参阅数据表第 40 页... 9 取决于该图表
GPIO_SetupPinOptions (3、GPIO_INPUT、GPIO_PULLUP);
GPIO_SetupPinMux (2、GPIO_MUX_CPU1、9);
GPIO_SetupPinOptions (2、GPIO_OUTPUT、GPIO_ASYNC);
GPIO_SetupPinMux (7、GPIO_MUX_CPU1、0);
GPIO_SetupPinOptions (7、GPIO_OUTPUT、GPIO_PushPull);
//禁用 CPU 中断
DINT;
//将 PIE 控制寄存器初始化为其默认状态。
//默认状态为禁用所有 PIE 中断并设置标志
//已清除。
InitPieCtrl();
//禁用 CPU 中断并清除所有 CPU 中断标志
IER = 0x0000;
IFR = 0x0000;
//使用指向 shell 中断的指针初始化 PIE 向量表
//服务例程 (ISR)
InitPieVectTable();
循环计数器= 0;
initSCIAEchoback(); //初始化 SCI 以进行回显
GPIO_WritePin (7、1);//用于发送信号
delay_US(10*50); // 1s
for(;;)
{
while (SciaRegs.SCIFFTX.bit.TXFFST!= 0){}
SciaRegs.SCITXBUF.ALL = 0x55;
delay_US(10*50); // 1s
循环计数器++;
}
}
// initSCIAEchoback — 初始化 SCI-A 以进行回显
void initSCIAEchoback (void)
{
//
//注意:已打开 SCIA 外设的时钟
//在 InitSysCtrl() 函数中
//
SciaRegs.SCICTL1.bit.SWRESET = 0;
SciaRegs.SCICTL1.bit.SWRESET = 1;
SciaRegs.SCICCR.ALL = 0x0007; // 1 个停止位、 无环回
//无奇偶校验、8 个字符位、
//异步模式、空闲线协议
SciaRegs.SCICTL1.all = 0x0003; //启用 TX、RX、内部 SCICLK、
//禁用 RX ERR、SLEEP、TXWAKE
SciaRegs.SCICTL2.all = 0x0003;
// SciaRegs.SCICTL2.bit.TXINTENA = 1;
SciaRegs.SCICTL2.bit.RXBKINTENA = 1;
SciaRegs.SCIHBAUD.ALL = 0x0001;
SciaRegs.SCILBAUD.ALL = 0x0045;
SciaRegs.SCIFFTX.all = 0xE040;//0xE040
SciaRegs.SCIFFRX.all = 0x2044;//0x2044
SciaRegs.SCIFFCT.all = 0x0;
SciaRegs.SCICTL1.all = 0x0023; //退出 SCI 复位
// SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;
}