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.

[参考译文] TMS320F2.8027万:其中,controlSUITE中SPI示例程序中的芯片选择引脚驱动低电平

Guru**** 2587345 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/656874/tms320f28027-where-is-chip-select-pin-driven-low-in-the-spi-example-program-in-controlsuite

部件号:TMS320F2.8027万
主题:controlSUITE中讨论的其他部件

以下代码通过SPI正确读取寄存器。 芯片选择引脚在何处驱动低电平?

//#######################################################################
//$TI发布:F2802x支持库v230 $//
发布日期:星期五5月8日07:43:05 CDT 2015 $//
$版权:版权所有(C) 2008-2015 Texas2015 Texas Instruments Incorporated -//
            http://www.ti.com/ 保留所有权利$//#########################################################################################


#include "DSP28x_Project.h" //设备标题文件和示例包括文件

#include "F2802x_common/include/adc.h"
#include "F2802x_common/include/clk.h"
#include "F2802x_common/include/flash.h"
#include "f2802x_common/include/gpio .h/spi"
#include "f280h/f280h/f280h/spdog"




的常见函数"include/f280_f2x_f2x_f280h/f280h/f"#include "f280h/f2x_common
//中断void ISRTimer2(void);
void delay_loop(void);
void SPI_xmit(uint16_t A);
void SPI_fifo_init(void);
void SPI_init(void);
void错误(void);

adc_handle myAdc;
clk_handle myClk;
flash_handle myFlash;
gpio_handle myGpio;
PIE_HANDLE myPIE;
SPI_HANDLE mySpi;

uint16_t sdata;//发送数据
uint16_t RDATA;//接收的数据

无效main (void)
{

cpu_handle myCpu;
PLL_HANDLE myPll;
WDOG_Handle myWDog;

//初始化此应用程序所需的所有句柄
myAdc = adc_init((void *)adc_base_addr, sizeof(ADC_Obj);
myClk = clk_init((void *)clk_base_addr, sizeof(clk_obj));
myCpu = CPU_INIT ((void *) NULL,sizeof (CPU_Obj));
myFlash = flash_init((void *)flash_base_addr, sizeof(flash_Obj));
myGpio = gPIO_INIT ((void *) gPIO_BASE ADDR,sizeof (gPIO_Obj));
myPie = PIE_INIT ((void *) PIE_base_ADDR,sizeof (PIE_Obj));
myPll = PLL_INIT ((void *) PLL_base_ADDR,sizeof (PLL_Obj));
mySpi = SPI_init((void *)SPIA_base_ADDR, sizeof(SPI_Obj);
myWDog = WDOG_INIT ((void *) WDOG_base_ADDR,sizeof (WDOG_Obj));

//执行基本系统初始化
WDOG_DISABLE (myWDog);
clk_enableAdcClock(myClk);
(*Device_cal)();

//选择内部振荡器1作为时钟源
CLK_setOscSrc (myClk,CLK_OscSrc_Internal);

//为x10 /2设置PLL,其输出频率为50MHz =10MHz *10/ 2
PLL_setup (myPll,PLL_Multiplier_10,PLL_DivideSelect_CLKIN_BY_2);

//禁用PIE和所有中断
PIE_DISABLE (myPie);
PIE_DisableAllInts(myPie);
CPU_disableGlobalInts (myCpu);
CPU_clearIntFlags (myCpu);

//如果从闪存运行,则复制RAM仅对RAM
#ifdef _flash起作用
memcpy (&RamfuncsRunStart,&RamfuncsLoadStart,(size_t)&RamfuncsLoadSize);
#endif

//初始化GPIO
GPIO设置上拉(myGpio,GPIO编号_16,GPIO _上拉_启用);
GPIO设置上拉(myGpio,GPIO编号_17,GPIO _上拉_启用);
GPIO设置上拉(myGpio,GPIO编号_18,GPIO _上拉_启用);
GPIO设置上拉(myGpio,GPIO编号_19,GPIO _上拉_启用);
GPIO_setQualification (myGpio,GPIO编号_16,GPIO _Qual_Async);
GPIO_setQualification (myGpio,GPIO编号_17,GPIO _Qual_Async);
GPIO_setQualification (myGpio,GPIO编号_18,GPIO _Qual_Async);
GPIO_setQualification (myGpio,gPIO_NUMBER_19,gPIO_Qual_Async);
GPIO_setMode (myGpio,GPIO编号_16,GPIO _16_Mode_SPISIMOA);
GPIO设置模式(myGpio,GPIO编号_17,GPIO _17_Mode_SPISOMIA);
GPIO设置模式(myGpio,GPIO编号_18,GPIO _18_Mode_SPICLKA);
GPIO设置模式(myGpio,GPIO编号_19,GPIO _19_Mode_SPISTEA_NOT);

//设置调试向量表并启用PIE
PIE_setDebugIntVectorTable(myPie);
PIE_ENABLE (myPie);

SPI_init(); //初始化SPI
SPI_fifo_init();//初始化SPI FIFO

sdata = 0x0100;
SPI_WRITE (mySpi,sdata);

//等待直到收到数据
while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)
{
}

RDATA = SPI_READ (mySpi);
SPI_WRITE (mySpi,sdata);

//等待直到收到数据
while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)
{
}

RDATA =(SPI_READ (mySpi)& 0xff);

while (1);
}

void error (void)
{
_ASM (" ESTOP0"); //测试失败!! 停止!
(;;)
{
}
}

作废SPI_init()
{
clk_enableSpiaClock(myClk);

//重置打开,上升边缘,16位字符位
SPI_setCharLength (mySpi, SPI_CharLength_16_Bits);

//启用主模式,正常相位,
//启用通话,SPI int禁用。
SPI_setMode (mySpi,SPI_Mode_Master);
SPI_setClkPhase (mySpi, SPI_ClkPhase_Delayed);
SPI_enableTx (mySpi);

SPI_setBaudRate(mySpi, 30);

//从重置中放弃SPI
//SPI_enableLoopBack (mySpi);
SPI_enable(mySpi);

//设置断点,使其不会干扰xmission
SPI_setPriority (mySpi,SPI_Priority_FreeRun);

return;
}

void spi_fifo_init()
{
//初始化SPI FIFO寄存器
SPI_enableChannels(mySpi);
SPI_enableFifoEnh (mySpi);
SPI_resetTxFifo(mySpi);
SPI_clearTxFifoInt(mySpi);
SPI_resetRxFifo(mySpi);
SPI_clearRxFifoInt(mySpi);
SPI_setRxFifoIntLevel (mySpi,SPI_FifoLevel,4_剑);

返回;}//============================================================================================



//没有更多。
//===========================================================================================================================================

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

    此示例使用由SPI硬件控制的芯片选择引脚,而不是使用GPIO和通过软件进行断言,因此没有实际的代码行来执行此操作。 由于这是在主模式下运行的代码,所以在SPI_write()将数据放入传输缓冲区后,将断言芯片选择。 如果您正在查找实际周期计数和波形,以显示STE活动与CLK和数据信号的关系,请查看数据表的SPI一章。

    http://www.ti.com/product/TMS320F2.8027万/datasheet/detailed-description#IDFm2tz1c6sylv

    Whitney

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

    我想连接SD卡。 我正在根据以下示例对代码进行建模:

    http://www.ti.com/apps/docs/litabsmultiplefilelist.tsp?literatureNumber=spraao7&docCategoryId=1&appId=270 

    sd_card_insertion()从main调用(在 28xxx_sd_spi/src/sd_spi_Initialization.c中找到)。

     在这种情况下,插入卡后,芯片选择必须保持在高位,同时数据线输出也保持在高位80个周期:

    GpioDataRegs.GPASET.bit.GPIO19 = 1
    
    用于(i=0;i<10;i++){
    
    SpiaRegs.SPITXBUF =字节;//传输字节
    同时(SpiaRegs.SPISTS.bit.INT_flag != 1);
    返回(SpiaRegs.SPIRXBUF <<8)
    
    ;} 

    程序将在(SpiaRegs.SPISTS.bit.INT_flag !=1)时永远等待。

    您能提供任何建议吗?

    //#######################################################################
    //$TI发行版:F2802x支持库v230 $
    //$发布日期:星期五5月 8日07:43:05 CDT 2015 $
    //$Copyright:版权所有(C) 2008-2015 Texas2015 Texas Instruments Incorporated -
    //        <ahref="www.ti.com/.../a> 版权所有,翻印必究$
    //#######################################################################

    #include "DSP28x_Project.h"   //设备头文件和示例包括文件

    #include "F2802x_common/include/adc.h"
    #include "F2802x_common/include/clk.h"
    #include "F2802x_common/include/flash.h"
    #include "F2802x_common/include/gPIC.h"
    #include "F2802x_common/include/pie.h"
    #include "F2802x_common/include/PLL.h"
    #include "F2802x_common/include/SPI.h"
    #include "F2802x_common/include/wdog.h"

    //本文件中找到的函数的prototype语句。
    // interrupt void ISRTimer2(void);
    void delay_loop(void);
    void spI_xmit(uint16_t a);
    void spi_fifo_init(void);
    void SPI_init(void);
    void错误(void);

    adc_handle myAdc;
    clk_handle myClk;
    FLASH_HANDLE myFlash;
    GPIO _手柄myGpio;
    PIE_HANDLE myPIE;
    SPI_handle mySpi;

    uINT16_t sddata;// 发送数据
    UINT16_t RDATA; //已接收数据

    Void主(void)


      cpu_handle myCpu;
      PLL_HANDLE myPll;
      WDOG_Handle myWDog;

      //初始化此应用程序所需的所有句柄
      myAdc = adc_init((void *)adc_base_addr, sizeof(ADC_Obj);
      myClk = clk_init((void *)clk_base_addr, sizeof(clk_obj));
      myCpu = CPU_INIT ((void *) NULL,sizeof (CPU_Obj));
      myFlash = flash_init((void *)flash_base_addr, sizeof(flash_Obj));
      myGpio = gPIO_INIT ((void *) gPIO_BASE ADDR,sizeof (gPIO_Obj));
      myPie = PIE_INIT ((void *) PIE_base_ADDR,sizeof (PIE_Obj));
      myPll = PLL_INIT ((void *) PLL_base_ADDR,sizeof (PLL_Obj));
      mySpi = SPI_init((void *)SPIA_base_ADDR, sizeof(SPI_Obj);
      myWDog = WDOG_INIT ((void *) WDOG_base_ADDR,sizeof (WDOG_Obj));

      //执行基本系统初始化
      WDOG_DISABLE (myWDog);
      clk_enableAdcClock(myClk);
      (*Device_cal)();

      //选择内部振荡器1作为时钟源
      CLK_setOscSrc (myClk,CLK_OscSrc_Internal);

      //为x10 /2设置PLL,其输出频率为50MHz =10MHz *10/ 2
      PLL_setup (myPll,PLL_Multiplier_10,PLL_DivideSelect_CLKIN_BY_2);

      //禁用PIE和所有中断
      PIE_DISABLE (myPie);
      PIE_DisableAllInts(myPie);
      CPU_disableGlobalInts (myCpu);
      CPU_clearIntFlags (myCpu);

      //如果从闪存复制运行,则RAM仅对RAM起作用
    #ifdef _flash
      memcpy (&RamfuncsRunStart,&RamfuncsLoadStart,(size_t)&RamfuncsLoadSize);
    #endif

      //初始化GPIO
      GPIO设置上拉(myGpio,GPIO编号_16,GPIO _上拉_启用);
      GPIO设置上拉(myGpio,GPIO编号_17,GPIO _上拉_启用);
      GPIO设置上拉(myGpio,GPIO编号_18,GPIO _上拉_启用);
      GPIO设置上拉(myGpio,GPIO编号_19,GPIO _上拉_启用);
      GPIO_setQualification (myGpio,GPIO编号_16,GPIO _Qual_Async);
      GPIO_setQualification (myGpio,GPIO编号_17,GPIO _Qual_Async);
      GPIO_setQualification (myGpio,GPIO编号_18,GPIO _Qual_Async);
      GPIO_setQualification (myGpio,gPIO_NUMBER_19,gPIO_Qual_Async);
      GPIO_setMode (myGpio,GPIO编号_16,GPIO _16_Mode_SPISIMOA);
      GPIO设置模式(myGpio,GPIO编号_17,GPIO _17_Mode_SPISOMIA);
      GPIO设置模式(myGpio,GPIO编号_18,GPIO _18_Mode_SPICLKA);
      GPIO设置模式(myGpio,GPIO编号_19,GPIO _19_Mode_SPISTEA_NOT);

      //设置调试向量表并启用PIE
      PIE_setDebugIntVectorTable(myPie);
      PIE_ENABLE (myPie);

      SPI_init();      //初始化SPI
      SPI_fifo_init();//  初始化SPI FIFO

      sdata = 0x0100;
      SPI_WRITE (mySpi,sdata);

      //等待直到收到数据
      while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)
      {
      }

      RDATA = SPI_READ (mySpi);
      SPI_WRITE (mySpi,sdata);

      //等待直到收到数据
      while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)
      {
      }

      RDATA =(SPI_READ (mySpi)& 0xff);

       同时(1);
    }

    作废错误(void)

      _ASM (" ESTOP0");   //测试失败!! 停止!
      (;;)
      {
      }
    }

    void spi_init()

      clk_enableSpiaClock(myClk);

      //重置打开,上升边缘,16位字符位
      SPI_setCharLength (mySpi, SPI_CharLength_16_Bits);

      //启用主模式,正常相位,
      //启用通话,SPI int禁用。
      SPI_setMode (mySpi,SPI_Mode_Master);
      SPI_setClkPhase (mySpi, SPI_ClkPhase_Delayed);
      SPI_enableTx (mySpi);

      SPI_setBaudRate(mySpi, 30);

      //从重置中放弃SPI
      //SPI_enableLoopBack (mySpi);
      SPI_enable(mySpi);

      //设置断点,使其不会干扰xmission
      SPI_setPriority (mySpi,SPI_Priority_FreeRun);

      返回;
    }

    void spi_fifo_init()

      //初始化SPI FIFO寄存器
      SPI_enableChannels(mySpi);
      SPI_enableFifoEnh (mySpi);
      SPI_resetTxFifo(mySpi);
      SPI_clearTxFifoInt(mySpi);
      SPI_resetRxFifo(mySpi);
      SPI_clearRxFifoInt(mySpi);
      SPI_setRxFifoIntLevel (mySpi,SPI_FifoLevel,4_剑);

      返回;
    }

    //===========================================================================================================================================
    //没有更多。
    //===========================================================================================================================================

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看到--由于您的应用程序对芯片选择有非常具体的计时要求,您需要使用软件设置和清除的GPIO,而不是硬件控制的芯片选择。 这就是应用程序注释中的示例代码的作用。

    您是按当前方式运行该应用程序注释中的代码,还是进行了一些更改? GPIO19是否正确配置为GPIO输出?

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

    CCS无法识别该项目。 我是否应该尝试将代码的各个部分整合到新项目中? 是否有效?  

     

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

    原始帖子中的代码正确读取设备上的寄存器(作为健全性检查)。 通过以下初始化,程序将阻止相同的while循环:

    EALLOW;
    /*启用选定引脚的内部上拉*///
    上拉可由用户启用或禁用。
    //这将启用指定引脚的上拉。
    //注释掉其他不需要的行。
    
    gpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;//在GPIO16上启用上拉(SPISIMOA)
    GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;//在GPIO17上启用上拉(SPISOMIA)
    GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;//在GPIO18上启用上拉(SPICLKA)
    gpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;//在GPIO19 (SPISTEA)上启用上拉功能
    
    
    /*将选定引脚的限定条件设置为仅异步*///
    这将为选定引脚选择异步(无限定条件)。
    //注释掉其他不需要的行。
    
    gpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3;//异步输入GPIO16 (SPISIMOA)
    gpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3;//异步输入GPIO17 (SPISOMIA)
    gpioCtrlRegs.GPAQSEL2.bit.GPIO18 =3;//异步输入GPIO18 (SPICLKA)
    // gpioCtrlRegs.GPAQSEL2.bit.GPIO19 =3;//异步输入GPIO19 (SPISTEA)
    
    /*配置
    GPIO-A引脚使用SPI regs*/指定可能的引脚。
    //注释掉其他不需要的行。
    
    gpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1;//将GPIO16配置为SPISIMOA
    gpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1;//将GPIO17配置为SPISOMIA
    gpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1;//将GPIO18配置为SPICLKA
    // GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1;//将GPIO19配置为SPISTEA
    gpioCtrlRegs.GPADIR.bit.GPIO19 = 1;
    GpioDataRegs.GPASET.bit.GPIO19 = 1;
    EDIS;
    
    //init SPI
    
    SpiaRegs.SPICCR.ALL =0x000f; //重置关闭,上升边缘,16位字符位
    SpiaRegs.SPICTL.ALL =0x000E; //启用主模式,延迟相位,
    //启用通话,SPI int禁用。
    SpiaRegs.SPIBRR =0x0063;
    SpiaRegs.SPICCR.ALL =0x008f; //从重置中放弃SPI
    SpiaRegs.SPIPRI.Bit.free = 1;
    
    
    //设置调试向量表并启用PIE
    PIE_setDebugIntVectorTable(myPie);
    PIE_ENABLE (myPie);
    
    GpioDataRegs.GPACLEAR.bit.GPIO19 = 1;//cs LOW
    
    SpiaRegs.SPITXBUF = 0x0100; //传输字节
    while (SpiaRegs.SPISTS.bit.INT_flag !=1);//Wait直到RXBUF收到最后一位
    RDATA = SpiaRegs.SPIRXBUF;
    
    SpiaRegs.SPITXBUF = 0x0100; //传输字节
    while (SpiaRegs.SPISTS.bit.INT_flag !=1);//Wait直到RXBUF收到最后一位
    RDATA = SpiaRegs.SPIRXBUF;
    
    GpioDataRegs.GPASET.bit.GPIO19 = 1;// cs HIGH
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    看起来该项目是为旧版CCS设计的。 我认为创建一个新项目并向其中添加示例文件可能是一种方法。

    将GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0设置为大小写。 否则,GPIO初始化的其余部分看起来正常。

    我看不到SPI配置有任何问题,这会导致INT_flag未设置。 是否在应用程序的开头调用InitSysCtrl()来配置时钟?

    您是否有可用于观察信号活动的示波器或逻辑分析仪?

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

    我没有太多使用CSS的经验。 是否可以只导入所需的文件而不导入所有文件?

    我不使用示波器,而是使用调试器。

    初始化函数中引用的大多数寄存器都无法识别:

    void InitPeripheralClocks (void)
    {
    EALLOW;
    
    // HISPPCP/LOSPCP预分段寄存器设置,通常将其设置为默认值
    SysCtrlRegs.HISPPCP.ALL = 0x0001; //SYSCLKOUT/2
    SysCtrlRegs.LOSPP.ALL = 0x0001; //SYSCLKOUT/2
    
    // XCLKOUT与SYSCLKOUT的比率。 默认情况下,XCLKOUT =1/4 SYSCLKOUT
    SysCtrlRegs.XCLK.bit.XCLKOUTDIV=2;//
    
    为所选外围设备设置了外设时钟。
    //如果您不使用外围设备,请关闭时钟
    //以节省电源。
    ////
    注:并非所有外设都可在所有280x派生产品上使用。
    //请参阅特定设备的数据表。
    ////
    此函数不是作为有效代码示例编写的。
    
    CtrlRegs.PCLKCR0.bit.ADCENCLK =1;// ADC
    SysCtrlRegs.PCLKCR0.bit.I2CAENCLK =1;// I2C SysSysSysSysSysReg.IALCR1.PCCLK
    
    
    
    
    
    
    = 1.PCCL1;Ctrl/PCCL1
    
    = P1= PEC1;CtrlREC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 = PEC1 =
    DevEmuRegs.PARTID.Bit.PARTNO != PARTNO_2.8016万)
    {
    SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1;// eQEP1
    SysCtrlRegs.PCLKCR0.bit.SPIBENCLK = 1;// SPI-B
    }
    
    IF (DevEmuRegs.PARTID.Bit.PARTNO != PARTNO_2801 &&)
    DevEmuRegs.PARTID.Bit.PARTNO != PARTNO_2802)
    {
    SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1;// ePWM4
    }
    
    IF (DevEmuRegs.PARTID.bit.PARTNO != PARTNO_2.8015万)
    {
    SysCtrlRegs.PCLKCR0.bit.ECANAENCLK=1;// eCAAN
    }
    
    IF (DevEmoRegs.PARTID.Bit.PARTNO == PARTNO_2809||
    DevEmuRegs.PARTID.Bit.PARTNO == PARTNO_2808 ||
    DevEmuRegs.PARTID.Bit.PARTNO == PARTNO_2806)
    {
    SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1;// eCAP3
    SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1;// eCAP4
    SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1;// ePWM5
    SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1;// ePWM6
    SysCtrlRegs.PCLKCR0.bit.SCIBENCLK =1;// SCI-B
    SysCtrlRegs.PCLKCR0.bit.SPICENCLK = 1;// SPI-C
    SysCtrlRegs.PCLKCR0.bit.SPIDENCLK = 1;// SPI-D
    SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK = 1;// eQEP2
    
    }
    IF (DevEmuRegs.PARTID.Bit.PARTNO == PARTNO_2808||
    DevEmuRegs.PARTID.Bit.PARTNO == PARTNO_2809)
    {
    SysCtrlRegs.PCLKCR0.bit.ECANBENCLK=1;// eCAN-B
    }
    
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC =1; //在ePWM
    
    EDIS中启用TBCLK;
    }
    void InitPll (UINT16 val,UINT16 clkindiv)
    {
    volatile UINT16 iVol;
    
    //如果
    (SysCtrlRegs.PLLSTS.bit.MCLKSTS !=0)
    ,请确保PLL未在跛形模式下运行{
    //检测到外部时钟缺失
    //将此线路替换为呼叫适当的
    // SystemShutdown();函数。
    ASM (" ESTOP0");
    }//
    
    CLKINDIV必须为0,PLLCR才能从
    // 0x0000更改。 通过外部重置XRSn
    IF (SysCtrlRegs.PLLSTS.bit.CLKINDIV != 0)
    将其设置为0
    SysCtrlRegs.PLLSTS.bit.CLKINDIV =0;
    }//
    
    更改PLLCR
    IF (SysCtrlRegs.PLLCR.bit.DIV != val){
    
    
    EALLOW;
    //在设置PLLCR之前,请关闭缺少时钟检测逻辑
    SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;
    SysCtrlRegs.PLLCR.bit.DIV = val;
    EDIS;
    
    //可选:等待PLL锁定。
    //在此期间,CPU将切换到OSCCLK/2,直到
    // PLL稳定。 PLL稳定后,CPU将保持稳定
    //切换到新的PLL值。
    //
    //此锁定时间由PLL锁定计数器监控。
    //
    //等待PLL锁定时不需要密码。
    //但是,如果代码执行任何对时间至关重要的操作,
    //并要求锁定正确的时钟,则最好是
    //等待此切换完成。
    
    //等待PLL锁定位设置。
    //注意此位在281x设备上不可用。 。
    //使用软件循环执行所需的计数。
    
    //在该循环之前,看门狗应该被禁用,或者在内部馈入
    //通过ServiceDog的循环()。
    
    //取消注释以禁用监视程序
    DisableDog ();
    
    while (SysCtrlRegs.PLLSTS.bit.PLLLOCKS !=1)
    {
    //取消注释以服务监视程序
    // ServiceDog ();
    }
    
    EALLOW;
    SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0;
    SysCtrlRegs.PLLSTS.bit.CLKINDIV != clkindiv;
    EDIS;
    }
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在配置时钟时,原始开机自检中的初始化是否正确?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    原始开机自检执行了正确的时钟配置。 CLK_setOscSrc()和PLL_setup()设置系统时钟,然后CLK_enableSpiaClock()打开时钟并进入SPIA外围设备。 您的SD卡应用程序中是否有这些呼叫?

    如果要改用InitSysCtrl(),请在controlSUITE中的固件开发包用户指南第3章中查找所需的文件,并包括需要添加到项目的路径(controlSUITE\DEVICE_SUPPORT\f2806x\v***\doc\f2806x-FRM-EX-UG.pdf)。2806。

    Whitney