Ti的C28x系列的DSP(28069)使用经验,SCI与RS485(ADM2587EBRWZ)

本文分享了使用TI的C28x系列DSP(28069)进行SCI(Serial Communication Interface)与RS485通讯的经验。通过FIFO轮询的方式实现SCI通讯,避免了简单查询方式带来的CPU资源浪费。针对28069的4级FIFO和ADM2587EBRWZ芯片特性,详细介绍了读写函数的实现,特别是读函数中的延迟对于RS485正常工作的重要性。此外,还包括SCI初始化、波特率设置和RS485功能的实现。
摘要由CSDN通过智能技术生成

本人使用SCI的通讯经历也不多,仅仅是用于DSP与威纶通公司的触摸屏进行过简单的通讯,通讯方式为RS485,通讯协议为ModbusRTU。

说到SCI,一开始我弄这个的时候,也不懂,网上看了很多资料,但也没有特别合适的,我现在公司的DSP的代码架构,都是一个主中断,一个主循环,一个1ms定时器中断,所以通讯函数,要么放主循环或1ms中断中运行,不会为SCI单独弄个中断,但我这边也不想用《手把手教你学DSP--基于TMS320X281x》上描述的简单SCI查询方式通讯,因为这种方法FIFO没有用,会造成对CPU资源的浪费。

所以我现在提的SCI通讯方式是基于FIFO的轮询方式,以这种方式来配置寄存器,从而形成的读写函数。但28069的SCI的FIFO只有4级,28377D的FIFO有16级。RS485是读写是不能够同时进行的,具体特点,可以百度,这跟RS232不相同。RS485的读写函数是基于ADM2587EBRWZ芯片而写,除了SCI的RX与TX引脚,还多了一个DIR引脚,DIR引脚为高,SCI能够发送数据,反之,读取数据。

代码:

  • SCI的初始化;
void InitScia(void)  // LSPCLK =  SYSCLKOUT/4  = 20Mhz
{
	SciaRegs.SCICCR.all = 0x07;	//1 stopbit,no parity,
                                //idle line mode,loopback test disable


	SciaRegs.SCIHBAUD = 0x10;	//20M  baud 9600   BBR = 0x103   
                                // BBR = LSPCLK/(波特率*8) - 1
	SciaRegs.SCILBAUD = 0x3;

	SciaRegs.SCICTL1.all = 0x0003;  // enable TX, RX, internal SCICLK,
    	                            // Disable RX ERR, SLEEP, TXWAKE
	SciaRegs.SCICTL2.all = 0;

	SciaRegs.SCIFFTX.all = 0xE
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值