大家好、
我有一些问题:
我的项目在 TI-RTOS 系统上运行。 我使用 DMA 函数设置 SPI、但在我的代码执行到 SPI_TRANSF()后、它将保持在这里。 不继续执行。 有人能告诉我如何解决这个问题吗?
在.cfg 中:
var hwiParams = new halHwi.Params();
/*用于 SPIUSCI 驱动程序的 DMA Hwi *
hwiParams.arg = 0;
halHwi.create (50、"&MSP_EXP430F5529LP_isrDMA"、hwiParams);
--------------------------------------------
在 MSP_EXP430F5529LP.c 中:
void MSP_EXP430F5529LP_isrDMA (UARg 参数)
{
/*调用 SPI DMA 函数、传递用于 WiFi 的 SPI 句柄*/
SPI_serviceISR ((SPI_Handle)&(SPI_CONFIG[0]));
}
/*
*========================================= SPI ========================================================
*
/*放入子段以允许 TI 链接器正确删除项目*/
#if defined (__TI_Compiler_version__)
#pragma DATA_SECTION (SPI_CONFIG、".CONST:SPI_CONFIG")
#pragma DATA_SECTION (spiUSCIBDMAHWAttrs、".const:spiUSCIBDMAHWAttrs")
#endif
#include
#include
SPIUSCIBDMA_Object spiUSCIBDMAObjects[MSP_EXP430F5529LP_SPICOUNT];
uint8_t spiUSCIBDMAscratchBuf[MSP_EXP430F5529LP_SPICOUNT];
CONST SPIUSCIIBDMA_HWAttrs spiUSCIBDMAHWAttrs[MSP_EXP430F5529LP_SPICOUNT]={
{
baseAddr = USCI_B0_BASE、
时钟源= USCI_B_SPI_CLOCKSOURCE_SMCLK、
.bitOrder = USCI_B_SPI_MSB_FIRST、
.scratchBufPtr =&spiUSCIBDMAscratchBuf[0]、
defaultTxBufValue = 0、
/* DMA */
.dmaBaseAddr = dma_BASE、
/* Rx 通道*/
.rxDMAChannelIndex = DMA_CHANGE_1、
.rxDMASourcedTrigger = DMA_TRIGGERSOURCE_18、
/* Tx 通道*/
TxDMAChannelIndex = DMA_CHANGE_0、
TxDMASourcedTrigger = DMA_TRIGGERSOURCE_19
}
};
CONST SPI_Config SPI_CONFIG[]={
{
.fxnTablePtr =&SPIUSCIBDMA_fxnTable、
.object =&spiUSCIBDMAObjects[0]、
hwAttrs =&spiUSCIBDMAHWAttrs[0]
}、
{NULL、NULL、NULL}、
};
/*
*==== MSP_EXP430F5529LP_initSPI ===
*
void MSP_EXP430F5529LP_initSPI (void)
{
/*
*注意:TI-RTOS 示例将 USCIB0配置为 SPI 或 I2C。 因此、
*在中同时使用 I2C 和 SPI 驱动程序时会发生冲突
*应用程序。 修改此文件中的引脚多路复用设置并解析
*运行应用程序前发生冲突。
*
/* SPI CLK */
GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P3、GPIO_PIN2);
/* MOSI/SIMO *
GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P3、GPIO_PIN0);
/* MISO/SOMI *
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P3、GPIO_PIN1);
spi_init();
}
--------------------------------------------
在 main.c 中:
空 SPI_MASTER_taskFxn (UARg arg0、UARg arg1)
{
SPI_Handle SPI_MASTER;
SPI_Params SPI_MASTER_Params;
/*创建 I2C 以供使用*/
SPI_PARAMS_INIT (&SPI_MASTER_PARAMS);
SPI_MASTER_PARAMS.transferMode = SPI_MODE_CALLACK;
SPI_MASTER_PARAMS.MODE = SPI_MASTER;
SPI_MASTER_PARAMS.bitrate = 1000000、
SPI_MASTER_PARAMS.dataSize = 8;
//spi_master_Params.frameFormat = SPI_POL0_PHA0;
SPI_MASTER = SPI_OPEN (Board_SPI0、&SPI_MASTER_PARAMS);
if (SPI_MASTER =NULL) System_abort ("初始化 SPI\n"时出错);
否则为 System_printf ("SPI 已初始化!\n");
system_flush();
uint8_t txBuffer[16]={0xAA、0xAA、0xAA、0xAA、0xAA、 0xAA、0xAA、0xAA、
0xAA、0xAA、0xAA、0xAA、0xAA、 0xAA、0xAA、0xAA};
SPI_Transaction spiTransaction;
spiTransaction.txBuf = txBuffer;
spiTransaction.rxBuf =空;
spiTransaction.count = 16;
while (1){
if (SPI_transfer (SPI_master、&spiTransaction)== NULL) System_printf ("SPI_transfer error\n");
否则 System_printf ("SPI_transfer sulation!\n");
system_flush();
}
}
2.当我设置 SPI_MASTER_PARAMS.bitrate = 1000000时、我可以测量 大约1MHz 的 SPI CLK。
但当我设置 为3000000时、它将变为4MHz。 TI-RTOS 系统上的限制是否为1MHz?
谢谢。


