当我使用CC2640的SPI发送数据时,发现每发送一个字节,SPI的片选线就会出现一次上升沿。但是我传输的每一帧,都包含多个字节,这就导致SPI的片选线出现多个上升沿。如何配置SPI的片选线,使其能够在低电平时传输多个字节?
1、我的SPI的配置,CC2640配置为master模式。我的全部代码可从附件中下载。
(1)SPI的管脚配置
#define CC2640R2_LAUNCHXL_SPI0_MISO IOID_6 /* RF1.20 */
#define CC2640R2_LAUNCHXL_SPI0_MOSI IOID_7 /* RF1.18 */
#define CC2640R2_LAUNCHXL_SPI0_CLK IOID_10 /* RF1.16 */
#define CC2640R2_LAUNCHXL_SPI0_CSN IOID_20 //PIN_UNASSIGNED
const PIN_Config BoardGpioInitTable[] = {
CC2640R2_LAUNCHXL_PIN_RLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
CC2640R2_LAUNCHXL_PIN_GLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
CC2640R2_LAUNCHXL_PIN_BTN1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS, /* Button is active low */
CC2640R2_LAUNCHXL_PIN_BTN2 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS, /* Button is active low */
//CC2640R2_LAUNCHXL_SPI_FLASH_CS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN, /* External flash chip select */
CC2640R2_LAUNCHXL_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN, /* UART RX via debugger back channel */
/*-----当不使用UART时,应该将UART TX拉低,避免漏电 -----*/
CC2640R2_LAUNCHXL_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL,
/*CC2640R2_LAUNCHXL_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL,*/ /* UART TX via debugger back channel */
CC2640R2_LAUNCHXL_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master out - slave in */
CC2640R2_LAUNCHXL_SPI0_MISO | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master in - slave out */
CC2640R2_LAUNCHXL_SPI0_CLK | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI clock */
CC2640R2_LAUNCHXL_SPI0_CSN | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN,
/*-----这里的配置是多余的,在ccfg.c中配置bootloader back door就足够 -----*/
/*BOOTLOADER_BACKDOOR | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH,*/
PIN_TERMINATE
};
(2)SPI的函数配置
SPI_Handle handle;
SPI_Params params;
uint8_t txBuffer[] = { 0x5A ,0x5A ,0xA5 ,0xA5 ,0x01 ,0xFF ,0x00 ,0x16 ,0x33 ,0x44 ,
0x55 ,0x66 ,0x33 ,0x44 ,0x55 ,0x66 ,0x33 ,0x44 ,0x55 ,0x66 ,
0x33 ,0x44 ,0x55 ,0x66 ,0x33 ,0x44 ,0x55 ,0x66 ,0x33 ,0x44 ,
0x00 ,0xDB};
static void Spi_task_init(void)
{
SPI_init(); // Initialize the SPI driver
// Init SPI and specify non-default parameters
SPI_Params_init(¶ms);
params.bitRate = 1000000;
params.dataSize = 8; // 8-bit data size
params.frameFormat = SPI_POL0_PHA0;
params.mode = SPI_MASTER;
params.transferMode= SPI_MODE_BLOCKING;
// Configure the transaction
transaction.count = sizeof(signature);
transaction.txBuf = (void *)signature;
transaction.rxBuf = NULL;
// Open the SPI and perform the transfer
handle = SPI_open(Board_SPI0, ¶ms);
}
uint8_t SPI_transfer_frame_write(SPI_Handle handle, SPI_Transaction *transaction,uint8_t *buffer, size_t size)
{
uint8_t uint8t_ret = 0;
bool bool_ret = true;
transaction->count = size;
transaction->txBuf = buffer;
transaction->rxBuf = NULL;
bool_ret = SPI_transfer(handle, transaction);
if(bool_ret == true)
{
uint8t_ret = 1;
}
else
{
uint8t_ret = 0;
}
return uint8t_ret;
}
static void Spi_taskFxn(UArg a0, UArg a1)
{
Spi_task_init();
SPI_transfer_frame_write(handle, &transaction,txBuffer, 32);
}
2、我传输一帧数据的波形图,如图1所示。每一个字节对应一个上升沿。
图1
3、我想实现的波形图,如图2所示。每一帧数据对应一个上升沿。
图2
4、附件
(1)SPI MASTER的源代码可在这里下载:
(3)simplelink_cc2640r2_sdk_1_40_00_45 可从如下路径下载:
(4)CC2640R2 launchpad 可从这里购买:
5、我的开发环境
CCS:Code Composer Studio 7.2.0
SDK:simplelink_cc2640r2_sdk_1_40_00_45
hardware:CC26640R2 launchpad develop kit
VS: Microsoft Visual C++ 2010 Express
系统:win7 64 位