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.

[参考译文] C2000微处理器上的外围设备SCI,SPI等驱动程序代码

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/585413/driver-code-for-peripherals-sci-spi-etc-on-c2000-microcontrollers

线程中讨论的其他部件:controlSUITETMS320F2.8377万DC2000WARE

为了对微处理器上的SCI,SPI,I2C (如f2806x和 F2802x)进行编程,每个外设TI都有两组寄存器定义。 例如SCI,TI在 sci.h/sci.c中有struct _sci_obj_,在F2806x_Sci.h中有struct sci_regs (基于controlSUITE的联合)。 它们实际上与结构中每个成员的大小和顺序相同。  

因此,在我们使用SCI基本地址进行初始化(使用SCI_init())以获得SCI_HANDLE对象之后。 然后,如果要使用SCI_regs结构对象,只需将SCI_handle对象转换并传递到SCI_regs的指针。

 如下所示:

 sci_handle scia_handle = sci_init((void*)scia_base_addr, sizeof(SCI_Obj));

sci_regs    * scia_regs_p =(sci_regs    *) scia_handle;

只是想确保这是正确的方法。

谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只是一个建议! 我建议您使用结构化方法来简化对SCI寄存器的访问。 请查看此处:
    C:\ti\controlSUITE\DEVICE_SUPPORT\F2802x\v230\F2802x_examples_structs\sci_echoback</s>2802

    关于您的上述问题,我从未使用过基于驱动程序的方法,因此不知道:)
    当然,一级将很快为您提供帮助。

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

    我通常以这种方式处理代码。

    例如,如果我必须使用SPI

     *我创建 "DRIVER_SPI.h"

    typedef volatile struct SPI_regs* SPI;
    typedef unsigned char UINT8;
    
    //打开外设的电源
    void SPI_PowerOn(SPI SPI);
    
    //设置寄存器
    //作为主中继器,8个字符
    // no FIFO
    ////
    请参见"数据表ref"
    ////
    CLKPOLARITY =... (参见数据表的第...页)
    // clk_phase =时钟的相位(参见数据表的第...页)
    // SPIBRR =波特率 (参见数据表的第...页)
    void SPI_SETUP(SPI SPI, int CLKPOLARITY, int CLK_PHASE , int SPIBRrr);//
    
    发送和接收字节
    UINT8 SPI_TxRx(SPI SPI, UINT8 b); 

    *我开发“DRIVER_SPI.c”(这适用于TMS320F2.8377万D)

    #include "SPI.h"
    
    void SPI_PowerOn(SPI SPI)
    {
    	EALLOW;// Codice per F2837xD
    	IF(SPI=&SpiaRegs) CpuSysRegs.PCLKCR8.bit.SPI_A =1;
    	IF(SPI=&SpibRegs) CpuSysRegs.PCLKCR8.SPI_SPI=8
    	
    	
    
    
    
    
    	;SPI_SPI_RINT.SPI=12月
    
    		1日SPI_SPI=8位SPIFS= SPI_SPI_SPIFS= SPI0SPI_SPI0SPI_SPI=8位SPI=8 SPRINT.SPRINT.SPI= SPI= SPI= SPI=8 			//强制重置
    
    	//1900 di SPRUHM8C–2013年12月–2014年12月修订
    
    	版(* SPI).SPICCR.Bit.CLKPOLARITY	= CLKPOLARITY;	// polarità 时钟
    	(* SPI).SPICCR.Bit.SPICHAR		= 7;			//numero di caratteri (8)
    
    	//1902 di SPRUHM8C;SPIX.SPL_
    
    	修改		后的SPL_位SPI_ SPL_位SPI_位SPL* 2014年12月	
    		1位SPI= 1.SPI_ SPI_位SPICHI = 7.SPICHI = 7.SPICHI = 7年12月1年12月/SPL_修改后的SPL_			
    	位/SPL_位/SPI_位SPI 						//TX启用(非高Z)
    
    	//1906 di SPRUHM8C–2013年12月–2014年12月修订
    
    	版(* SPI).SPIBRR.Bit.SPI_bit_rate	= SPIBRR;
    
    	//1880 di SPRUHM8C–2013年12月–2014年12月修订
    
    	版(* SPI).SPICCR.Bit.SPISWRET.Exit				
    
    	
    
    	PT = 1;// e2e.ti.com/.../40.4775万 /RESET/RESET/RESET/"重置/" 							//等待1us @ 200MHz
    }
    
    UINT8 SPI_TxRx (SPI SPI, UINT8 b)// trasmette/riceve un byte
    {(*SPI).SPITXBUF
    	= b<8;//1904
    
    	di SPRUHM8C–2013年12月–2014年12月修订
    
    	,同时(*SPI).SPISTs.bit.INT_SPI=0;}*SPI=0;SPIRETURE=0
    	
    

     *在"main.c"中,我使用此代码

    SPI_PowerOn(&SpibRegs);
    SPI_Setup (&SpibRegs, 1,0,49);// 1Mbps,10[us/字节](8us TX/RX,2us延迟)
    
    for (;;)
    {
    	SPI_TxRx(0x05);	
    } 

    *但您可以根据自己的需要构建代码

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可能需要查看C2000ware:
    “C2000Ware for C2000微处理器是一套集成的开发软件和文档,旨在最大限度地缩短软件开发时间。 从特定于设备的驱动程序和库到设备外设示例,C2000Ware为开始开发和评估提供了坚实的基础。 C2000Ware是可选的开发工具,与controlSUITE相比,Piccolo F2.8004万x系列需要它。”

    www.ti.com/.../C2000Ware