工具/软件:Code Composer Studio
我正在尝试使用 MSP430F5438A 实验板来完成其中一个课程的项目。 目前、我使用 的是用户体验演示 、特别是音频录制/播放应用。
我的目标是在音频数据被录制并存储在闪存中之后、但在回放之前对其进行修改。 目前、当我运行该方法时、我可以检索数据、但无法将其写回存储器。 下面是我使用的函数、它位于演示程序中。
void audiorecord (unsigned char 模式) { unsigned char i; setupRecord(); //... //... //... 合成语音();//my 函数被调用 shutdownRecord(); }
void 合成语音(){ unsigned long flash_loc; FCTL3 = FWKEY;//解锁闪存以进行写入 FCTL1 = FWKEY + WRT;//将闪存设置为写入字节 unsigned long FlashPtr;//指向闪存的长指针 FlashPtr = PlaybackPtr;//加载音频的起始位置 (flash_Byte = AudioMemory_Memory= AudioMastrt; Flash_loc++){//循环 无符号字符数据=(*(unsigned char*) FlashPtr);//从闪存检索数据 (*(unsigned char*) FlashPtr)=(数据+ 1);//修改数据并将其存储在闪存中的同一位置 FlashPtr++;//闪存指针位置 } FCTL3 = FWY +增量; //将闪存锁定为写入 // char data[AUDIO_MEMEND-AUDIO_MEMSTART]; }
到目前为止,我可以考虑解决这个问题的几个办法,但我想得到一些建议,说明应采取何种途径。
选项1)我在写入闪存之前不擦除闪存。 我在 E2E 表格上多次看到过这一点、我认为这可能是(DATA+1)未写入闪存的原因。 在当前设计中、擦除闪存将不是很有效、因为音频是使用 DMA 以块的形式写入闪存。 通常有几千个样本、这意味着读取一个样本、擦除该位置并重新写入它需要发生几千次、这可能不会很慢。
选项2)我可以在每次中断时读取 ADC12MEM0、而不是使用 DMA 写入闪存、并将音频样本保存在 RAM 中并在那里进行修改。 不过、这需要大量重写演示、我对 MSP430没有太多经验。 另一个潜在的问题可能是 ADC12MEM0的读取速度、修改和在下一个音频采样被读取前存储在闪存中。
感谢您为此提供的任何帮助、感谢您抽出宝贵的时间。