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.

[参考译文] TMS320C6657:TMS320C6657 SPI

Guru**** 2538955 points
Other Parts Discussed in Thread: TMS320C6657

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1194695/tms320c6657-tms320c6657-spi

器件型号:TMS320C6657

TMS320C6657上的 SPI 外设所需的文档:接口寄存器定义。

 文献编号:SPRUGP2A,2012年3月--包括大量未定义的内容。

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

    您好、Genady

    [引用 userid="548439" URL"~/support/processors-group/processors/f/processors-forum/1194695/tms320c6657-tms320c6657-spi "] TMS320C6657上的 SPI 外设所需的文档:接口寄存器定义。[/quot]

    在下面的产品页面中、当我们单击"View-All"选项时、有80个技术文档。 这些是 C6657的唯一文档。

    https://www.ti.com/lit/ug/sprugp2a/sprugp2a.pdf

     SPRUGP2A -本文献是 SPI 的主要文档。

    [引用 userid="548439" URL"~/support/processors-group/processors/f/processors-forum/1194695/tms320c6657-tms320c6657-spi ]\n 文献 编号:SPRUGP2A,2012年3月--包括大量未定义的内容。
    [/报价]

    要详细了解您的查询,请指出“未定义”吗?  

    此致

    Shankari G

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

    响应未提供所需的信息或文档

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

    Genady、

    您是否要指出  SPRUGP2A 中的"未定义的"?

    此致

    Shankari G

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

    spiRegs =(CSL_SpiRegs*) 0x20BF0000;

     

    没有关于(例如):

    spiRegs->SPIPC2

    spiRegs->SPIPC7

     

    并非所有字段都定义为:

    spiRegs->SPIFLG

    spiRegs->SPIPC0

    …μ A 等等

     

    我通过实验创建寄存器设置、而不需要所有信息–SPI 适用于我的解决方案、但我不确定哪种是最佳的。

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

    Genady、

    这似乎是给的…

    --

    数据表--> SPI 接口的存储器映射

    --

    在 SPI 接口指南中、

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

    你(们)好
    关于:
    spiRegs->SPIPC2
    spiRegs->SPIPC7

    ??


    工作配置为:  
     spiRegs->SPIPC0 = 0x01010E01;  

    requierd 将 位31-12设置为:0x01010 用于工作


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

    Genady、

    让我来看看处理器 SDK 6.3的 NOR_writer 代码的 SPI 配置、然后返回。

    如果时间允许、您也可以同时查看相同的内容。

    此致

    Shankari G

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

    Genady、

    美好的一天!

     我可以对 SPI-NOR 工作代码进行实验并验证 SPIPC0寄存器。

    无需将 SPIPC1更改为 SPIPC7 --- >表示 C6657、不像 C674x/omapl13x。

    --

    更具体地说、如果我们将值"0x00000E01"设置到 SPIPC0寄存器、则会在内部进行处理并将值设置为"0x01010E01"。

    用户无需考虑位12 - 31、因为它们是保留位。

    --

    最佳配置将只是设置"SPIPC0"--- (不需要任何其他-- SPIPC1至 SPIPC7)。

    ---- >数据表似乎是正确的、只有"SPIPC0"--> https://www.ti.com/lit/ug/sprugp2a/sprugp2a.pdf -->第号:37页

    #define CSL_SPI_SPIPC0_SCS0FUN0_SHIFT (((uint32_t) 0x00000000u)
    #define CSL_SPI_SPIPC0_CLKFUN_SHIFT (((uint32_t) 0x00000009u)
    #define CSL_SPI_SPIPC0_SIMOFUN_SHIFT (((uint32_t) 0x0000000Au)
    #define CSL_SPI_SPIPC0_SOMIFUN_SHIFT (((uint32_t) 0x0000000BU)

    #define CSL_SPI_SPIPC0_SCS0FUN0_SPI ((uint32_t) 0x00000001u)
    #define CSL_SPI_SPIPC0_CLKFUN_SPI (((uint32_t) 0x00000001u)
    #define CSL_SPI_SPIPC0_SIMOFUN_SPI ((uint32_t) 0x00000001u)
    #define CSL_SPI_SPIPC0_SOMIFUN_SPI ((uint32_t) 0x00000001u)

    SPI_SPIPC0 =(CSL_SPI_SPIPC0_SCS0FUN0_SPI <<CSL_SPI_SPIPC0_SCS0FUN0_SHIFT)|
    (CSL_SPI_SPIPC0_CLKFUN_SPI <<CSL_SPI_SPIPC0_CLKFUN_SHIFT)|
    (CSL_SPI_SPIPC0_SIMOFUN_SPI <<CSL_SPI_SPIPC0_SIMOFUN_SHIFT)|
    (CSL_SPI_SPIPC0_SOMIFUN_SPI <<CSL_SPI_SPIPC0_SOMIFUN_SHIFT);

    --

    以下配置是 SPI 接口的完整工作配置。

    /*********
    *
    *函数:SPI_Claim
    *
    *说明:此函数声明 SPI 控制器中的 SPI 总线
    *
    *参数:uint32 cs -用于从 SPI 器件的芯片选择号
    * uint32 freq - SPI 时钟频率
    *
    *返回值:错误状态
    *
    秘书长的报告 /
    SPI_STATUS
    SPI_Claim
    (
    uint32_t cs、
    uint32_t freq
    )

    uint32_t 标量;

    PLIBSPILOCK()

    /*启用 SPI 硬件*/
    SPI_SPIGCR0 = CSL_SPI_SPIGCR0_RESET_IN_RESET;
    SPI_DELAY (2000);
    SPI_SPIGCR0 = CSL_SPI_SPIGCR0_RESET_OUT_ON_RESET;

    /*设置主模式、加电且未激活*/
    SPI_SPIGCR1 =(CSL_SPI_SPIGCR1_MASTER_MASTER << CSL_SPI_SPIGCR1_MASTER_SHIFT)|
    (CSL_SPI_SPIGCR1_CLKMOD_INTERNAL << CSL_SPI_SPIGCR1_CLKMOD_SHIFT);


    /* CS0、CS1、CLK、从器件输入和从器件输出是功能引脚*/
    如果(cs =0){

    SPI_SPIPC0 =(CSL_SPI_SPIPC0_SCS0FUN0_SPI <<CSL_SPI_SPIPC0_SCS0FUN0_SHIFT)|
    (CSL_SPI_SPIPC0_CLKFUN_SPI <<CSL_SPI_SPIPC0_CLKFUN_SHIFT)|
    (CSL_SPI_SPIPC0_SIMOFUN_SPI <<CSL_SPI_SPIPC0_SIMOFUN_SHIFT)|
    (CSL_SPI_SPIPC0_SOMIFUN_SPI <<CSL_SPI_SPIPC0_SOMIFUN_SHIFT);

    }否则、如果(cs =1){
    SPI_SPIPC0 =(((CSL_SPI_SPI_SPIPC0_SCS0FUN1_SPI <<CSL_SPI_SPIPC0_SCS0FUN1_SHIFT)|
    (CSL_SPI_SPIPC0_CLKFUN_SPI <<CSL_SPI_SPIPC0_CLKFUN_SHIFT)|
    (CSL_SPI_SPIPC0_SIMOFUN_SPI <<CSL_SPI_SPIPC0_SIMOFUN_SHIFT)|
    (CSL_SPI_SPIPC0_SOMIFUN_SPI <<CSL_SPI_SPIPC0_SOMIFUN_SHIFT))和0xFFFF;


    /*设置格式*/
    标量=((SPI_MODULE_CLK / freq)-1)& 0xFF;

    如果(cs =0){
    SPI_SPIFMT0 =(8 <<CSL_SPI_SPIFMT_CHARLEN_SHIFT)|
    (标量<< CSL_SPI_SPIFMT_PRESCOLE_SHIFT)|
    (CSL_SPI_SPIFMT_PHASE_DELAY << CSL_SPI_SPIFMT_PHASE_SHIFT)|
    (CSL_SPI_SPIFMT_POLICLE_LOW << CSL_SPI_SPIFMT_POLICE_SHIFT)|
    (CSL_SPI_SPIFMT_SHIFTDIR_MSB <<CSL_SPI_SPIFMT_SHIFTDIR_SHIFT);
    }如果(cs =1){
    SPI_SPIFMT0 =(16 << CSL_SPI_SPIFMT_CHARLEN_SHIFT)|
    (标量<< CSL_SPI_SPIFMT_PRESCOLE_SHIFT)|
    (CSL_SPI_SPIFMT_PHASE_NO_DELAY << CSL_SPI_SPIFMT_PHASE_SHIFT)|
    (CSL_SPI_SPIFMT_POLICLE_LOW << CSL_SPI_SPIFMT_POLICE_SHIFT)|
    (CSL_SPI_SPIFMT_SHIFTDIR_MSB <<CSL_SPI_SPIFMT_SHIFTDIR_SHIFT);


    /*在传输结束时保持 CS 处于活动状态,直到显式取消置位*/
    Data1_REG_val =(CSL_SPI_SPIDAT1_CSHOLD_ENABLE << CSL_SPI_SPIDAT1_CSHOLD_SHIFT)|
    (0x02 <<CSL_SPI_SPIDAT1_CSNR_SHIFT);
    如果(cs =0){
    SPI_SPIDAT1 =(CSL_SPI_SPIDAT1_CSHOLD_ENABLE << CSL_SPI_SPIDAT1_CSHOLD_SHIFT)|
    (0x02 <<CSL_SPI_SPIDAT1_CSNR_SHIFT);

    /*包括轻微延迟。 这里没有科学。 也应该很好
    *无延迟
    *
    如果(cs =0){
    SPI_SPIDELAY =(8 <<CSL_SPI_SPIDELAY_C2TDELAY_SHIFT)|
    (8 <<CSL_SPI_SPIDELAY_T2CDELAY_SHIFT);
    /*默认芯片选择寄存器*/
    SPI_SPIDEF = CSL_SPI_SPIDEF_RESETVAL;
    }否则、如果(cs =1){
    SPI_SPIDELAY =(6 <<CSL_SPI_SPIDELAY_C2TDELAY_SHIFT)|
    (3 <<CSL_SPI_SPIDELAY_T2CDELAY_SHIFT);


    /*无中断*/
    SPI_SPIINT0 = CSL_SPI_SPIINT0_RESETVAL;
    SPI_SPILVL = CSL_SPI_SPILVL_RESETVAL;

    /*启用 SPI */
    SPI_SPIGCR1|=(CSL_SPI_SPIGCR1_ENABLE_ENABLE << CSL_SPI_SPIGCR1_ENABLE_SHIFT);

    如果(cs =1){
    SPI_SPIDAT0 = 1 << 15;
    SPI_DELAY (10000);
    /*读取 SPIFLG、等待直到 RX 完全中断*/
    IF (((SPI_SPIFLG &(CSL_SPI_SPI_SPI_SPIFLG_RXINTFLG_FULL_<<CSL_SPI_SPIFLG_RXINTFLG_SHIFT)) ) { )
    /*读取一个字节数据*/
    标量= SPI_SPIBUF & 0xFF;
    /*清除数据*/
    SPI_SPIBUF = 0;

    否则{
    /*读取一个字节数据*/
    标量= SPI_SPIBUF & 0xFF;
    返回 SPI_EFAIL;


    返回 SPI_Eok;

    /********* /

    ----------

    为了验证这一点、我进行了一个小实验。  

    例如、

    1.将一些虚拟值(如0x00000001)设置 SPIPC0

    2.在内存浏览器中将 SPIPC0寄存器的值可视化,地址 为0x20BF0014  -->它将显示为0x00000001

    3.将值设置为0x00000E01 --- > APT 配置到 SPIPC0  

    4. 在存储器浏览器中将 SPIPC0寄存器的值可视化、地址 为0x20BF0014  -->该值将显示为0x01010E01

     --

    我希望这对您有所帮助!

    此致

    Shankari G