完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
[tr]现在例程里面的数据模式是字符char类型,我想改为float类型要改哪些参数?附相关代码如下:
/****************************************************************************/ /* */ /* 读状态寄存器 */ /* */ /****************************************************************************/ void StatusGet(void) { tx_data[0] = SPI_FLASH_STATUS_RX; tx_len = rx_len = 2; SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), 0x1); SpiTransfer(); } /****************************************************************************/ /* */ /* 写使能 */ /* */ /****************************************************************************/ void WriteEnable(void) { tx_data[0] = SPI_FLASH_WRITE_EN; tx_len = rx_len = 1; SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), 0x1); SpiTransfer(); } /****************************************************************************/ /* */ /* 忙检测 */ /* */ /****************************************************************************/ void IsFlashBusy(void) { do{ StatusGet(); }while(rx_data[1] & WRITE_IN_PROGRESS); } /****************************************************************************/ /* */ /* 扇区擦除 */ /* */ /****************************************************************************/ void SectorErase(void) { tx_data[0] = SPI_FLASH_SECTOR_ERASE; tx_data[1] = SPI_FLASH_ADDR_MSB1; tx_data[2] = SPI_FLASH_ADDR_MSB0; tx_data[3] = SPI_FLASH_ADDR_LSB; tx_len = rx_len = 4; SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), 0x1); SpiTransfer(); IsFlashBusy(); } /****************************************************************************/ /* */ /* 写扇区(256字节) */ /* */ /****************************************************************************/ void WritetoFlash(void) { unsigned int index; tx_data[0] = SPI_FLASH_PAGE_WRITE; tx_data[1] = SPI_FLASH_ADDR_MSB1; tx_data[2] = SPI_FLASH_ADDR_MSB0; tx_data[3] = SPI_FLASH_ADDR_LSB; // 准备要写入的数据 for (index = 10; index < 260; index++) { tx_data[index] = index; } for(index = 4; index < 260; index++) { vrf_data[index] = index; } tx_len = rx_len = index; SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), 0x1); SpiTransfer(); IsFlashBusy(); } /****************************************************************************/ /* */ /* 读数据 */ /* */ /****************************************************************************/ void ReadFromFlash(void) { unsigned int index; tx_data[0] = SPI_FLASH_READ; tx_data[1] = SPI_FLASH_ADDR_MSB1; tx_data[2] = SPI_FLASH_ADDR_MSB0; tx_data[3] = SPI_FLASH_ADDR_LSB; // 情况变量 for (index = 4; index < 260; index++) { tx_data[index] = 0; } tx_len = rx_len = index; SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), 0x1); SpiTransfer(); } /****************************************************************************/ /* */ /* 数据校验 */ /* */ /****************************************************************************/ int VerifyData(void) { unsigned int index; for(index = 4; index < 260; index++) { if(vrf_data[index] != rx_data[index]) { UARTPuts("rn", -1); UARTPuts("VerifyData: Comparing the data written to and read", -1); UARTPuts(" from Flash.rnThe two data blocks are unequal.", -1); UARTPuts(" Mismatch found at index ", -1); UARTPutNum((int)index - 3); UARTPuts("rn", -1); UARTPuts("Verify Failed.rn", -1); return 0; } } if (index == 260) { UARTPuts("rnThe data in the Flash and the one written ", -1); UARTPuts("to it are equal.rn", -1); UARTPuts("Verify successfully.rn", -1); return 1; } return 0; } [/tr] |
|
相关推荐
2个回答
|
|
/****************************************************************************/
/* */ /* SPI 中断初始化 */ /* */ /****************************************************************************/ void SPIInterruptInit(void) { // 注册中断服务函数 IntRegister(C674X_MASK_INT4, SPIIsr); // 映射中断事件 IntEventMap(C674X_MASK_INT4, SYS_INT_SPI1_INT); // 使能可屏蔽中断 IntEnable(C674X_MASK_INT4); } /****************************************************************************/ /* */ /* SPI 初始化 */ /* */ /****************************************************************************/ void SPIInit(void) { unsigned char cs = 0x01; unsigned char dcs = 0x01; unsigned int val = SIMO_SOMI_CLK_CS; SPIReset(SOC_SPI_1_REGS); SPIOutOfReset(SOC_SPI_1_REGS); SPIModeConfigure(SOC_SPI_1_REGS, SPI_MASTER_MODE); SPIClkConfigure(SOC_SPI_1_REGS, 228000000, 20000000, SPI_DATA_FORMAT0); SPIPinControl(SOC_SPI_1_REGS, 0, 0, &val); SPIDefaultCSSet(SOC_SPI_1_REGS, dcs); // 配置 SPI 数据格式 SPIDataFormatConfig(SPI_DATA_FORMAT0); // 配置 SPI 数据格式及片选信号 SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), cs); // 映射中断到 INT1 SPIIntLevelSet(SOC_SPI_1_REGS, SPI_RECV_INTLVL | SPI_TRANSMIT_INTLVL); // 使能 SPI SPIEnable(SOC_SPI_1_REGS); } /****************************************************************************/ /* */ /* 配置 SPI 数据格式 */ /* */ /****************************************************************************/ void SPIDataFormatConfig(unsigned int dataFormat) { // 配置 SPI 时钟 SPIConfigClkFormat(SOC_SPI_1_REGS, (SPI_CLK_POL_HIGH | SPI_CLK_INPHASE), dataFormat); // 配置 SPI 发送时 MSB 优先 SPIShiftM***First(SOC_SPI_1_REGS, dataFormat); // 设置字符长度 SPICharLengthSet(SOC_SPI_1_REGS, CHAR_LENGTH, dataFormat); } /****************************************************************************/ /* */ /* SPI 传输 */ /* */ /****************************************************************************/ void SpiTransfer(void) { p_tx = &tx_data[0]; p_rx = &rx_data[0]; SPIIntEnable(SOC_SPI_1_REGS, (SPI_RECV_INT | SPI_TRANSMIT_INT)); while(flag); flag = 1; SPIDat1Config(SOC_SPI_1_REGS, SPI_DATA_FORMAT0, 0x1); } /****************************************************************************/ /* */ /* SPI 中断服务函数 */ /* */ /****************************************************************************/ void SPIIsr(void) { unsigned int intCode = 0; IntEventClear(SYS_INT_SPI1_INT); intCode = SPIInterruptVectorGet(SOC_SPI_1_REGS); while (intCode) { if(intCode == SPI_TX_BUF_EMPTY) { tx_len--; SPITransmitData1(SOC_SPI_1_REGS, *p_tx); p_tx++; if (!tx_len) { SPIIntDisable(SOC_SPI_1_REGS, SPI_TRANSMIT_INT); } } if(intCode == SPI_RECV_FULL) { rx_len--; *p_rx = (char)SPIDataReceive(SOC_SPI_1_REGS); p_rx++; if (!rx_len) { flag = 0; SPIIntDisable(SOC_SPI_1_REGS, SPI_RECV_INT); } } intCode = SPIInterruptVectorGet(SOC_SPI_1_REGS); } } |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
基于RK3588J的6路MIPI CSI视频采集案例分享,多路视频系统必看!
1219 浏览 0 评论
592 浏览 0 评论
【创龙科技TL570x-EVM开发板试用体验】 GStreamer 功能测评
8566 浏览 8 评论
【创龙科技TL570x-EVM开发板试用体验】创龙TL5708-EVM开发板入手使用体验评测
6593 浏览 0 评论
【创龙TLZ7x-EasyEVM评估板试用连载】+3.环境搭建vmware+ubuntu详细教程(二)
1399 浏览 0 评论
841浏览 0评论
【创龙科技AM64x开发板试用体验】创龙科技AM64x开发板及核心板介绍
830浏览 0评论
【创龙科技AM64x开发板试用体验】创龙科技AM64x开发板--板卡调试软件安装
847浏览 0评论
【创龙科技AM64x开发板试用体验】AM64x开发板开箱测评
839浏览 0评论
求助! 关于使用自制底板插入创龙IMX8MM 核心板无法启动问题
490浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 19:01 , Processed in 0.499683 second(s), Total 50, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号