spi用于接外部Flash和读卡IC , 功能需求:
外部Flash: 读写都是通过system CPU操作SPI来完成
读卡IC: 每330ms使用sensor controller操作SPI做一次检卡 , 检测到卡片之后唤醒system CPU操作SPI来读卡
实测发现sensor controller和system CPU只有一个能对SPI进行操作 , 应该怎样实现sensor controller和system CPU都能对SPI进行控制 ?
Viki Shi:
根据你的描述,SCS检卡完成后,如果有卡则唤醒System CPU进行操作,这个流程是完全可行的,你是通过Sensor Controller Studio来操作的吗?Sensor Controller Studio生成的代码类似与一个驱动接口,相应的参数都会包含进去,像firmware,相关定义,基本函数等,System CPU可以据此 去控制SCS并进行数据操作。
SCS里有SPI部分的资料,请参考一下: C:\Program Files (x86)\Texas Instruments\Sensor Controller Studio\resource_docs\spi_data_transfer.html
AndyChen:
回复 Viki Shi:
目前我只是写了一个简单的测试demo, sensor controller的代码如下: (Initialization Code和Execution Code都是用的下面这一段代码)spiBegin(SPI_POL0_PHA0, AUXIO_SPI_CSN_USER_SPI_CSN); spiTx8bit(SPI_POL0_PHA0, 0x46); spiEnd(SPI_POL0_PHA0, AUXIO_SPI_CSN_USER_SPI_CSN); fwScheduleTask(1);将生成的.c和.h文件移到IAR project中 ( simple_peripheral_oad_offchip ) , system CPU不开启SPI , 可以看到每1秒 SPI会发送1 byte数据0x46。
但是当我在IAR project中也开启system CPU的SPI ( 调用SPI_init()和SPI_open() ) , 并且开启一个clock定时每330ms发送1 byte数据0x57 , 测到的结果是SPI只会每330ms发送0x57 , 不会再有每1秒发送0x46。
void app_init( void ) {scifOsalInit();scifInit(&scifDriverSetup);uint32_t rtc_Hz = 1;scifStartRtcTicksNow(0x00010000 / rtc_Hz);scifStartTasksNbl(BV(SCIF_SPI_TASK_TASK_ID));/* 初始化外设 */app_spi_init();app_gpio_init();/* 定时器 */Util_constructClock( &app_rfu_timer, app_rfu_timer_cb, 330, 330, TRUE, SBP_RFU_TIMER_EVT );}static void app_gpio_init( void ) {/* 若一个引脚已经被PIN_open(),再次对这个引脚执行PIN_open()将返回NULL,且此次PIN_open()中* 的引脚配置并不会被执行 */app_pin_handle = PIN_open( &app_pin_state, app_pin_tab );if( app_pin_handle == NULL )while (1); }static void app_spi_init( void ) {SPI_ParamsspiParams;SPI_init(); }static void user_rfu_timer_process( void ) {SPI_ParamsspiParams;SPI_Params_init(&spiParams);spiParams.dataSize= 8;spiParams.bitRate= 2000000;spiParams.frameFormat = SPI_POL0_PHA0;app_spi_handle = SPI_open( CC2640R2_LAUNCHXL_SPI0, &spiParams );cv520_tx_buf[0] = 0x57;cv520_spi_transaction(1);SPI_close( app_spi_handle ); }