工具/软件:Code Composer Studio
大家好、
我使用 的是 TMS320F28379D LaunchPadXL 板 。 我想将该数据存储在 SD 卡模块上。 好的、现在。 我已经介绍了 CCS 中提供的 SD 卡接口示例、如 sd_card.c、mmc_F2837x.c、ff.c
这是我的主代码和 Power_ON 设置多路复用器引脚。我已经将 MMC_F2837x.c 中的每个 SpicRegs 更改为 SpiaRegs。接下来我尝试使用 f_mount、f_open、f_write、f_close、但没有发生任何情况。我是否做了错误? 能不能有人建议我。我是新的、这是我的第一个开发套件。
谢谢
int main (void) { INT nStatus; fil 文件; 字 btw = 5; FRESULT 结果; 字 bw; char buff []={'t'、'e'、's'、't'、'n'}; // //初始化系统控制 // InitSysCtrl(); #ifdef _flash // 将时间关键代码和闪存设置代码复制到 RAM //其中包括以下函数:InitFlash(); // RamfuncsLoadStart、RamfuncsLoadSize 和 RamfuncsRunStart //符号由链接器创建。 请参阅器件.cmd 文件。 // memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize); // //调用闪存初始化以设置闪存等待状态 //此函数必须驻留在 RAM 中// InitFlash(); #endif // //初始化中断控制器和矢量表 // InitPieCtrl(); InitPieVectTable(); // //将系统节拍设置为每秒触发100次。 // SysTickInit(); SysTickPeriodSet (SysCtlClockGet (system_clock_speed)/ 100); SysTickIntRegister (SysTickHandler); SysTickIntEnable(); SysTickEnable(); // //启用中断 // IntMasterEnable(); //SPI-A 初始值 POWER_ON(); //FatFs fresult = f_mount (0、&g_sFatfs); if (fresult!= FR_OK) { return (fresult); } fresult = f_open (&file、"Test.txt"、fa_create_new); if (fresult!= FR_OK) { return (fresult); } fresult = f_write (&file、buff、btw、&bw); if (fresult!= FR_OK) { return (fresult); } fresult = f_close (&file); if (fresult!= FR_OK) { return (fresult); } }
POWER_ON 设置引脚
void power_on (void)//编辑 { /* *这并不是真正打开电源、而是初始化 与 SD 卡通信所需的 SPI 端口和引脚。 * EALLOW; /*启用用于在 SPI 上驱动 SDC 的外设*/ CpuSysRegs.PCLKCR8.bit.SPI_A = 1; /* *将相应的引脚配置为 SPI 而不是 GPIO。 CS *信号被直接驱动、以确保我们可以通过将其保持在低电平 *完成与 SD 卡的交易。 * //解锁 SD 卡 SPI GPIO GpioCtrlRegs.GPBLOCK.bit.GPIO58=0; GpioCtrlRegs.GPBLOCK.bit.GPIO59=0; GpioCtrlRegs.GPBLOCK.bit.GPIO60=0; GpioCtrlRegs.GPBLOCK.bit.GPIO61=0; //设置 MUX 和 DIR GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;//保留为 GPIO 以进行手动 CS 控制 GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 15; GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 15; GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 15; GpioCtrlRegs.GPBGMUX2.bit.GPIO61 = 15; GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 15; GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 15; GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 15; GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 15; GpioCtrlRegs.GPBDIR.bit.GPIO61=1; //设置 GPIO 上拉禁用/启用 GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;//通常需要被拉高 GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;//通常需要被拉高 GpioCtrlRegs.GPBPUD.bit.GPIO60=0; GpioCtrlRegs.GPBPUD.bit.GPIO61=0; //在异步模式下设置 GPIO GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;//异步输入 GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3; GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3; GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3; //为 CPU1配置 GPIO GpioCtrlRegs.GPBCSEL4.bit.GPIO58=0; GpioCtrlRegs.GPBCSEL4.bit.GPIO59=0; GpioCtrlRegs.GPBCSEL4.bit.GPIO60=0; GpioCtrlRegs.GPBCSEL4.bit.GPIO61=0; //锁定 SD 卡 SPI GPIO GpioCtrlRegs.GPBLOCK.bit.GPIO58=1; GpioCtrlRegs.GPBLOCK.bit.GPIO59=1; GpioCtrlRegs.GPBLOCK.bit.GPIO60=1; GpioCtrlRegs.GPBLOCK.bit.GPIO61=1; EDIS; /*取消***芯片为 SD 卡和串行闪存选择的置位*/ 取消选择(); /*配置 SPI C 端口*/ SpiaRegs.SPICCR.bit.SPISWRESET = 0; //将复位位位设置为低电平 SpiaRegs.SPICTL.bit.CLK_PHASE = 0; SpiaRegs.SPICCR.bit.CLKPOLARITY = 1; SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; //主控模式 SpiaRegs.SPIBRR.ALL = 63; //将值更新为正确设置以实现正确的比特率(电流:~500kHz) SpiaRegs.SPICCR.bit.SPICHAR = 0x7; //将字符长度设置为8位 SpiaRegs.SPICTL.bit.TALK = 1; SpiaRegs.SPICCR.bit.SPISWRESET = 1; //从复位中释放 SPI SpiaRegs.SPIPRI.bit.FREE = 1; SpiaRegs.SPIPRI.bit.Soft = 1; /*将 DI 和 CS 设置为高电平并向卡的 SCLK 施加超过74个脉冲*/ /*才能接受本机命令。 * //send_inition_clock_train (); //DELAY_US (50); PowerFlag = 1; }