工具/软件:TI-RTOS
我的封装:
C:\ti\BIOS_6_46_04_53
C:\ti\ccsv7\ [CCS 版本:7.0.0.00043]
C:\ti\pdk_k2g_1_0_5
C:\ti\processor_sdk_rtos_k2g_3_03_00_04
Processor SDK RTOS 示例 MCSPI_slavemode 示例利用两个 EVM 通过以下连接运行 SPI 主设备和从设备:
K2G EVM:
EVM1 (主器件)====EVM2 (从器件)
J12引脚9 (MISO)--- J12引脚9 (MISO)
J12引脚11 (MOSI)--- J12引脚11 (MOSI)
J12引脚13 (CLK)--- J12引脚13 (CLK)
J12引脚15 (CS0)--- J12引脚15 (CS0)
J12引脚49 (DGND)--- J12引脚49 (DGND)
由于我没有两个 K2G EVM、我使用一个具有以下连接的 K2G EVM 板
主器件(JP1引脚9) SPI2_SCLK -->从器件(J12引脚13) SPI0_SCLK
主器件(JP1引脚15) SPI2_MOSI -->从器件(J12引脚11) SPI0_MOSI
主器件(JP1引脚16) SPI2_MISO <--从器件(J12引脚9) SPI0_MISO
主器件(JP1引脚17) SPI2_CS0 -->从器件(J12引脚15) SPI0_CS0
ARM 内核在 JP1上作为 SPI2中的 SPI 主器件运行(音频扩展)、而 DSP 内核在 J12上作为 SPI0中的 SPI 从器件运行(串行扩展)。
我在 CCS7.0中构建了以下两个项目
MCSPI_SlaveMode_MasterExample_evmK2G_armExampleProject
MCSPI_SlaveMode_SlaveExample_evmK2G_c66xExampleProject
分别在 ARM 和 DSP 上运行。
该示例对 JP12上的主器件或从器件使用 SPI0我对 SPI2上运行的 ARM 内核进行了以下更改
在 main_mcspi_slave_mode.c 中
(笑声)
/*测试通道#*/
#define MCSPI_TEST_CHN 2 // SPI2表示主器件
(笑声)
如果(主机== true)
{
// 实例= Board_MCSPI_MASTER_Instance - 1; // 0:SPI0
实例= 2; //将 SPI2用于主器件
}
其他
{
实例= Board_MCSPI_SLAVE_INSTANCE - 1;
}
当运行默认值包括比特率= 1Mbps 的测试时
所有这三个测试:非 DMA 中断、轮询模式和非 DMA 回调模式都在 ARM (SPI 主器件)和 DSP (SPI 从器件)上通过。
但通过以下更改将比特率提高到10Mbps
(笑声)
/*更改默认 SPI_params */
spiParams.bitrate = 10000000; // 10Mbps <-添加了此行
SPI = SPI_open (实例、&spiParams);
在 DSP 上运行的 SPI 从器件接收来自 ARM (SPI 主器件)的所有数据。 但 ARM (SPI 主器件)错过了从 DSP (SPI 从器件)发送的最后一个字节
寄存器 SPI2 -> SPIBUF -> RXDATA 确实接收来自 DSP (SPI 从器件)的最后一个字节。 它似乎是 API、SPI_TRANSFH (.) 不将数据移动到 transaction.rxBuf。
标志 SPI2 -> SPIBUF -> RXEMPTY 为1、但当我访问寄存器值而不是 ARM 内核时、RXDATA 中的最后一个字节可能会与我的仿真器一同读取。
我还注意到:
当 spiParams.bitrate 设置为1000000 (1Mbps)时
C2TDELAY = 0;
T2CDELAY = 0;
将 spiParams.bitrate 设置为10Mbps 时
C2TDELAY = 8;
T2CDELAY = 8;
这意味着偶数 spiParams.bitrate 设置为10M (SPI2_SCLK 在示波器上观察到以10MHz 运行)真正的数据速率小于10Mbps。
Q1:K2G 在 SPI 主模式下以高达50MHz 的频率运行、在从模式下以25MHz 的频率运行(实际速度取决于 SPI 功能时钟和 SPI 时钟分频器)。 如果我想以10MHz 的频率运行 SPI CLK
,除了将 spiParams.bitrate 设置为10M 之外,我还应该更改什么以使 RTOS SPI 驱动程序成功运行?
Q2:如何将 SPIDELAY 寄存器中的 C2TDELAY 和 T2CDELAY 以及 SPIDAT1寄存器中的 CSHOLD 从 RTOS SPI 驱动器而不是其存储器映射寄存器中更改?