TMS320F28335项目开发记录10_28335之SCI模块

28335之SCI模块

1.介绍

    TMS320F28335内部有三个SCI模块,SCIA、SCIB、SCIC。

    每一个SCI模块都有一个接收器和发送器,SCI的接收器和发送器各有一个16级的FIFO(First In First Out先入先出)队列,它们都还有自己独立的使能位和中断位;可以工作在半双工或全双工模式;

    串行通信的三种方式:

     

2.SCI深入

    A. GPIO的管脚对应如下:

  SCIA对应GPIO28/29和GPIO35/36两组可选

  SCIB有四组管脚可以选择,分别是 O9/11,GPIO14/15,GPIO18/19,GPIO22/23;

  SCIC对应的是GPIO62/63

    

    在编程初始化时,需要先将对应的GPIO管脚配置为SCI模式,才能使得这些管脚具有SCI功能;

    

   

    B. SCI通信中带有格式信息的数据字符叫帧,下面是典型的数据帧格式

   

    C. 下面单独介绍一下SCI波特率设置寄存器SCIHBAUD和SCILBAUD,0-15是高字节与低字节连在一起,构成16位波特率设置寄存器BRR。


    BRR = SCIHBAUD + SCILBAUD

    如果1<= BRR <=65535,那么SCI波特率=LSPCLK / ( (BRR+1) * 8 ),由此,可以带入你需要的波特率,既可以得到BRR的值;

    如果BRR = 0,那么SCI波特率=LSPCLK/ 16


   D. SCI模块发送和接受数据的原理:



3.SCI串口编程

   A.先初始化IO管脚 (以SCI-A为例,SCI-B、SCI-C的初始化方法一样,就是照着改对应的管脚就行)

void InitSciaGpio()    //初始化SCIA的GPIO管脚为例子
{
   EALLOW;
//根据硬件设计决定采用GPIO28/29和GPIO35/36中的哪一组。这里以35/36为例
//定义管脚为上拉
    GpioCtrlRegs.GPBPUD.bit.GPIO36 = 0;    
    GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0;    

//定义管脚为异步输入
    GpioCtrlRegs.GPBQSEL1.bit.GPIO36 = 3; 

//配置管脚为SCI功能管脚
    GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 1; 
    GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 1;   

    EDIS;
}

   B.SCI初始化配置

void scia_init()
{
    SciaRegs.SCICCR.all =0x0007;   // 1 stop bit, No loopback
                                   // No parity,8 char bits,
                                   // async mode, idle-line protocol

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

    SciaRegs.SCICTL2.bit.TXINTENA =1; //发送中断使能
    SciaRegs.SCICTL2.bit.RXBKINTENA =1;//接收中断使能

    SciaRegs.SCIHBAUD    =0x0001; // 9600 baud @LSPCLK = 37.5MHz.
    SciaRegs.SCILBAUD    =0x00E7;

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

   C.接着进行中断的配置

EALLOW;    // This is needed to write to EALLOW protected registers
   PieVectTable.SCIRXINTA = &sciaRxIsr;
   PieVectTable.SCITXINTA = &sciaTxIsr;
   PieVectTable.SCIRXINTB = &scibRxIsr;
   PieVectTable.SCITXINTB = &scibTxIsr;
EDIS;   // This is needed to disable write to EALLOW protected registers
       D.上面是将SCIA和SCIB的中断服务程序连到PIE的中断表中,发生中断就会跑到你的ISR去了, 下面是开中断:

 PieCtrlRegs.PIECTRL.bit.ENPIE = 1;   // Enable the PIE block
   PieCtrlRegs.PIEIER9.bit.INTx1=1;     // PIE Group 9, int1
   PieCtrlRegs.PIEIER9.bit.INTx2=1;     // PIE Group 9, INT2
   PieCtrlRegs.PIEIER9.bit.INTx3=1;     // PIE Group 9, INT3
   PieCtrlRegs.PIEIER9.bit.INTx4=1;     // PIE Group 9, INT4
   IER = 0x100;    // Enable CPU INT
   EINT;

    这样串口基本就OK了。


上面的配置是配置典型的串口中断程序;

下面是一个SCI例程:

/*
 * Serial.c
 *
 *  Created on: 2014-12-8
 *      Author: SCOTT
 */


#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"	 // CPU_FRQ_100MHZ is in it!

void scib_fifo_init()
{
	ScibRegs.SCIFFTX.all = 0xe040;
	ScibRegs.SCIFFRX.all = 0x204f;
	ScibRegs.SCIFFCT.all = 0x0;
}

/*
void scib_echoback_init()
{
	ScibRegs.SCICCR.all = 0x0007;  			// one stop bit,8 data bit,No parity, No Lookback
	ScibRegs.SCICTL1.all = 0x0003; 			// enable TX, RX, internal SCICLK,
    							   	   	   	// Disable RX ERR, SLEEP, TXWAKE
	ScibRegs.SCICTL2.all =0x0003;
	ScibRegs.SCICTL2.bit.TXINTENA = 1;		// TX interrupt enable
	ScibRegs.SCICTL2.bit.RXBKINTENA =1;
#if (CPU_FRQ_150MHZ)
    ScibRegs.SCIHBAUD    =0x0001;  			// 9600 baud @LSPCLK = 37.5MHz. 150/4 = 37.5MHZ
	ScibRegs.SCILBAUD    =0x00E7;
#endif
#if (CPU_FRQ_100MHZ)
    ScibRegs.SCIHBAUD    =0x0001;  			// 9600 baud @LSPCLK = 20MHz.
    ScibRegs.SCILBAUD    =0x0044;
#endif
	ScibRegs.SCICTL1.all =0x0023;  			// Relinquish SCI from Reset
}

*/


void scib_echoback_init()
{
	ScibRegs.SCICCR.all = 0x0007;  			// one stop bit,8 data bit,No parity, No Lookback
	ScibRegs.SCICTL1.all = 0x0003; 			// enable TX, RX, internal SCICLK,
    							   	   	   	// Disable RX ERR, SLEEP, TXWAKE
	ScibRegs.SCICTL2.all =0x0003;			// RX TX Interrupt enable
	ScibRegs.SCICTL2.bit.TXINTENA = 1;		// TX interrupt enable
	ScibRegs.SCICTL2.bit.RXBKINTENA =1;		// RX interrupt enable
#if (CPU_FRQ_150MHZ)
    ScibRegs.SCIHBAUD    =0x0001;  			// 9600 baud @LSPCLK = 37.5MHz. 150/4 = 37.5MHZ
	ScibRegs.SCILBAUD    =0x00E7;
#endif
#if (CPU_FRQ_100MHZ)
    ScibRegs.SCIHBAUD    =0x0001;  			// 9600 baud @LSPCLK = 20MHz.
    ScibRegs.SCILBAUD    =0x0044;
#endif
    ScibRegs.SCIFFTX.all = 0xC020;
    ScibRegs.SCIFFRX.all = 0x0021;                  // Receive FIFO generates interrupt when the FIFO status bits (RXFFST4–0) and FIFO level bits
                                                    //(RXFFIL4–0) match (i.e., are greater than or equal to). Default value of these bits after reset                                                        //–11111. This will avoid frequent interrupts, after reset, as the receive FIFO will be empty mos                                                        // t of the time.
    ScibRegs.SCIFFCT.all = 0x00;
    ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1;
    ScibRegs.SCIFFRX.bit.RXFIFORESET=1;
    ScibRegs.SCICTL1.all =0x0023;  			// Relinquish SCI from Reset
}

void scib_xmit(int c)
{
	//while (ScicRegs.SCIFFTX.bit.TXFFST != 0) {} //==0 -> transmit BUF is empty,can receive new data
	while(ScibRegs.SCICTL2.bit.TXRDY != 1){}	  //also right,but the way of tool's display is different
	ScibRegs.SCITXBUF = c;
}

void scib_msg(char *msg)
{
	int i;
	i = 0;
	while('\0' != msg[i])
	{
		scib_xmit(msg[i]);
		i++;
	}
}

Uint16 scib_rvc()
{
	Uint16 data = 0x0000;
	while(ScibRegs.SCIFFRX.bit.RXFFST == 0){}
	data = ScibRegs.SCIRXBUF.all;

	while(ScibRegs.SCICTL2.bit.TXRDY != 1){}
	ScibRegs.SCITXBUF = (data & 0xff);
	return data;
}

/*No More*/


  • 17
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: TMS320F28335是德州仪器公司(Texas Instruments)推出的一款高性能数字信号处理器(DSP)。它具有较强的计算能力和丰富的外设接口,广泛用于工业控制、电力电子、通信等领域的实时信号处理应用。 TMS320F28335全套开发例程是指一套完整的软件代码示例,旨在帮助开发人员快速上手并开发基于TMS320F28335的应用。这些例程通常包括以下几个方面: 1. 引导程序:通过引导程序,可以将用户的应用程序加载到DSP内部的闪存中,并实现启动和初始化功能。 2. 外设驱动程序:包括与TMS320F28335芯片内部外设相关的驱动程序,如模数转换器(ADC)、数模转换器(DAC)、通用串行总线(USB)、通用异步收发器(UART)等。这些驱动程序能够帮助开发人员快速使用和配置这些外设。 3. 信号处理算法:针对不同应用场景,提供了一些常见的信号处理算法的实现,如数字滤波、通信协议处理、图像处理等。开发人员可以根据自己的需求来选择和修改这些算法。 4. 联机调试工具:一些例程还提供了与开发板联机调试的工具,可以通过调试器和仿真器实时监测和修改DSP的运行状态,方便开发调试。 通过使用TMS320F28335全套开发例程,开发人员可以快速了解和掌握TMS320F28335开发环境和工具链,加快应用的开发速度,并且可以根据自己的需要进行二次开发和定制。这一套完整的开发例程为开发人员提供了一个良好的起点,使他们能够更好地利用TMS320F28335的强大功能,开发出高性能的实时信号处理应用。 ### 回答2: TMS320F28335是德州仪器(TI)公司推出的一款高性能的数字信号处理器(DSP)。它在工业控制、电力电子、电机驱动和汽车电子等领域广泛应用。为了帮助开发人员快速上手并加快开发过程,TI提供了TMS320F28335全套开发例程。 TMS320F28335全套开发例程包括了各种示例程序,涵盖了DSP的各个功能模块和特性。其中包括了基本的初学者示例,如LED灯闪烁、按键检测和串口通信等。这些简单的示例程序可以帮助开发者理解DSP的基本框架和编程方式。 此外,TMS320F28335全套开发例程还涵盖了更复杂和实用的应用场景。例如,ADC数据采集和处理、PWM波形生成和控制、PID算法实现以及通信协议(如CAN和SPI)的应用等。这些例程提供了具体的代码和详细的解释,帮助开发者理解和应用DSP的各种功能。 TI还提供了一些特定领域的开发例程,以满足特定应用需求。例如,电机驱动控制领域的例程,可以帮助工程师实现电机的速度和位置控制;电力电子领域的例程,可以帮助工程师理解和应用功率因数校正、谐波抑制等功能。 总之,TMS320F28335全套开发例程为开发者提供了丰富的资源和实践经验。通过学习和应用这些例程,工程师可以快速掌握DSP的编程和应用技巧,缩短开发周期,提高开发效率。同时,开发者还可以根据自己的应用需求进行修改和定制,以满足特定的应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值