arm - CMSIS DSP 返回硬故障 (Cortex M0)
问题描述
我正在尝试调试此代码并确定在调用 fft 方法时导致硬故障的原因。程序通过中断从 ADC 读取数据,每 128 个周期计算前一组周期的 FFT。
我已经指出了导致故障的线路。谁能确定我做错了什么?
uint16_t dataADC[64];
uint16_t dataFFT[128];
uint16_t magFFT[64];
uint16_t count = 127;
arm_rfft_instance_q15 RealFFT_Instance;
arm_cfft_radix4_instance_q15 MyComplexFFT_Instance;
void ADC_IRQHandler(void){
/* Read ADC value */
Chip_ADC_ReadValue(LPC_ADC, ADC_CH0, &dataADC[count]);
count--;
if (count == 0){
NVIC_DisableIRQ(ADC_IRQn);
}
Chip_ADC_SetStartMode(LPC_ADC, ADC_START_NOW, ADC_TRIGGERMODE_RISING);
}
/**
* @brief main routine for ADC example
* @return Function should not exit
*/
int main(void){
SystemCoreClockUpdate();
Board_Init();
Init_ADC_PinMux();
DEBUGSTR("ADC Demo\r\n");
//Init FFT
arm_rfft_init_q15(&RealFFT_Instance, &MyComplexFFT_Instance, 64,0,1);
/* ADC Init */
Chip_ADC_Init(LPC_ADC, &ADCSetup);
Chip_ADC_EnableChannel(LPC_ADC, ADC_CH0, ENABLE);
/* Enable ADC interrupt*/
NVIC_ClearPendingIRQ(ADC_IRQn);
NVIC_EnableIRQ(ADC_IRQn);
HAID_ADC->INTEN |= 0x0011;
/* Start A/D conversion */
Chip_ADC_SetStartMode(LPC_ADC, ADC_START_NOW, ADC_TRIGGERMODE_RISING);
while (1) {
if(count == 0){
NVIC_DisableIRQ(ADC_IRQn);
arm_rfft_q15(&RealFFT_Instance, (q15_t *)dataADC, (q15_t *)dataFFT); //Causing Hard Fault!
for(int i = 0; i < 128; i++){
dataFFT[i] <<= 8; //scaling
}
arm_cmplx_mag_q15((q15_t *)dataFFT, (q15_t *)magFFT, 64);
count = 63;
NVIC_EnableIRQ(ADC_IRQn);
}
__WFI();
}
return 0;
}
#endif
解决方案
推荐阅读
- ios - 无法分配给属性:'size' 是一个 get-only 属性 Swift
- openstack-nova - ValueError:nova-consoleauth 和 nova-scheduler 的 IPv6 URL 无效
- java - Java/Hibernate - 如何禁用连接实体更新
- typescript - 打字稿字符串相等检查不起作用
- string - 如何在 Python 3 中解码以下字节
- asp.net - 屏幕抓取网站到新的浏览器窗口
- akka - 如何追踪 Akka 序列化失败的根本原因?
- git - 两个标签之间更改的文件的 git 列表以及中间标签更改
- angular - 使用 ionic-native http 在 ionic 3 中启用 SSL 固定
- orientdb - MATCH 命令,在 WHILE 中使用 $currentMatch 来停止遍历