大家好、
我需要一些有关软件设计的建议。 这里是快速说明、我有一些 DAC 生成了一些模拟信号、作为对 某些输入方波信号的响应。 它会生成一些小输出波、该波始于输入信号的上升沿、结束于下降沿。 MCU 和 DAC 之间通过 SSI 接口进行通信。 我在输入信号上设置 GPIO 中断、因此当上升沿或下降沿发生时、系统会收到通知。 在上升沿、我开始通过 SSI 值发送到 DAC。 发送在运行频率为250kHz 的定时器中断内完成。 输入信号的频率最大为100Hz、在该频率下误差不是太明显、但在较高的频率下、我看到上升沿和输出波形开始之间的差异较大。 输出波在输入方波信号后延迟一段时间。 这里是代码块、如果您对我的错误行为有一些建议、可能我应该在主循环中生成信号、而不是在计时器中断中生成信号?
void portB_ISR (void) { if (GPIOIntStatus (input_square_port、false)&input_square_PIN){ if (GPIOPin_port、input_square_PIN))//edge was rissing { flag_Falling=0 ;ui32_timer_cnt=0 ; inflag_timer_find_for_timer_falling (timer_fet_ise_signed)= 0; 如果 TIv_timer_f_timer_falling (timer_f_timer_fet_timer_find_timer_signal = 0)、则 TIvert_timer_f_timer_falling = 0;如果 TIv_timer_f_timer_f_timer_signal = 0;如果 TIvert_for_timer_ning_timer_falling = 0;如果 TIv_timer_f_sign_timer_f_sign_signal = 1;如果 TIvert_for_timer_ning_falling (timer_f_f_timer_falling = 1)、则= 0;t 540) ui32_outval=ui32_outval-50; 否则(ui32_outval>416) ui32_outval=ui32_outval-10; 否则 { if (ui32_outval=416) ui32_outval=370; 否则 ui32_outval=416; }i32_outval=u32_uS/256] ;uiS32_uSval=uuuuuuS32_outval/ uuuuS32uuuSval=uuuuuS32uS/ uSval[uS32_uuuuu0];uS32uu } //输入信号中的上升沿->如果 (FLAG_RISING) { ui32_outval=0; pui32DataTx[0]= ui32_outval; SSIDataPut (SSI0_BASE、pu32DataTx[0]);} 如果(FLAG_COUNT_Picker) {ui32_pick+ ;SSi32_fiftx+= u+= ui32_fiftor+; }uip_ip_iptor+(u32_fiftor+)、则关闭输出信号
void SSI_Configuration () { SysCtlPeripheralEnable (SYSCTL_Periph_SSI0); GPIOPinConfigure (GPIO_PA2_SSI0CLK); GPIOPinConfigure (GPIO_PA3_SSI0FSS); //GPIOPinConfigure (GPIO_PA4_SSI0RX);//RX 未使用 GPIO_P3_SSIP_SSIP_SSIP_SIMP_CLK ;GPIO_SSIP_SSIP_SSIP_SSIP_CLK ( GPIO_SSIP_SSIP_SSIP_SSIP_SSIP_SSIP_SSIP_SSIP_SIMP_SSIP_SSIP_SSIP_SSIP_SSIP_SSIP_0);GPIO_SSIP_SSIP_SSIP_SSIP_SSIP_SSIP_SSIP_SSIP_SSIP_CLK (GP_SSIP 16000000、16); SSIEnable (SSI0_BASE); }
