当我使用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 可从如下路径下载:
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 位