Thread 中讨论的其他器件:TM4C123、Strike
您好!
我想创建三个单次激发作为三个 MOSFET 的栅极信号。 占空比是可变的、可通过触摸显示屏进行更改。
我在单次触发模式下配置了三个计时器并对其进行了测试。
但一次拍摄是一个接一个而不是同时进行(与照片类似)
是否可以同时进行三次一次拍摄? 我出了什么问题?
我在此处的代码:
/*
*计时器配置
*
void timer_GPIO_config (void){//void timer_GPIO_config (uint8_t * slider_E_1){
/*启用计时器*/
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER3);
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER2);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);
/*将 Timer A 配置为单次触发模式*/
TimerConfigure (TIMER0_BASE、TIMER_CFG_A_ONE_SHOT);//TIMER_CFG_A_PERIODICRACY_CFG_A_ONE_SHOT
TimerConfigure (TIMER3_base、TIMER_CFG_A_ONE_SHOT);
TimerConfigure (TIMER2_base、TIMER_CFG_A_ONE_SHOT);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_3);
GPIOPinTypeGPIOOutput (GPIO_PORTG_base、GPIO_PIN_0);
GPIOPinTypeGPIOOutput (GPIO_PORTL_base、GPIO_PIN_4);
GPIODirModeSet (GPIO_PORTF_BASE、GPIO_PIN_3、GPIO_DIR_MODE_OUT);
GPIODirModeSet (GPIO_PORTG_base、GPIO_PIN_0、GPIO_DIR_MODE_OUT);
GPIODirModeSet (GPIO_PORTL_base、GPIO_PIN_4、GPIO_DIR_MODE_OUT);
/*注册发生中断时要调用的函数 P:355 */
IntRegister (INT_TIMER0A、timerIntHandler);
GPIOIntRegister (GPIO_PORTF_BASE、gpioIntHandler);
IntRegister (INT_TIMER3A、timerIntHandlerTimer1);
GPIOIntRegister (GPIO_PORTG_base、gpioIntHandler1);
IntRegister (INT_TIMER2A、timerIntHandlerTimer2);
GPIOIntRegister (GPIO_PORTL_base、gpioIntHandler2);
/*启用指定的中断*/
IntEnable (INT_TIMER0A);
IntEnable (INT_TIMER3A);
IntEnable (INT_TIMER2A);
/*启用处理器中断*/
IntMasterEnable();
/*设置指定引脚的中断类型*/
GPIOIntTypeSet (GPIO_PORTF_BASE、GPIO_PIN_3、GPIO_HIGH_LEVEL);
GPIOIntTypeSet (GPIO_PORTG_base、GPIO_PIN_0、GPIO_HIGH_LEVEL);
GPIOIntTypeSet (GPIO_PORTL_BASE、GPIO_PIN_4、GPIO_HIGH_LEVEL);
/*启用指定的 GPIO 中断*/
GPIOIntEnable (GPIO_PORTF_BASE、GPIO_INT_PIN_3);
GPIOIntEnable (GPIO_PORTG_base、GPIO_INT_PIN_0);
GPIOIntEnable (GPIO_PORTL_BASE、GPIO_INT_PIN_4);
/*启用计时器中断源 P:543*/
TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
TimerIntEnable (TIMER3_base、TIMER_TINA_TIMEOUT);
TimerIntEnable (TIMER2_base、TIMER_TINA_TIMEOUT);
}
void timer_start (){
TimerLoadSet (TIMER0_BASE、TIMER_A、12000001 * SLIDER_E_1);
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、GPIO_PIN_3);
TimerLoadSet (TIMER3_base、timer_A、12000001 * slider_E_2);
GPIOPinWrite (GPIO_PORTG_base、GPIO_PIN_0、GPIO_PIN_0);
TimerLoadSet (TIMER2_base、timer_A、12000001 * slider_E_3);
GPIOPinWrite (GPIO_PORTL_BASE、GPIO_PIN_4、GPIO_PIN_4);
}
void turbo_boost (void){
GPIOIntDisable (GPIO_PORTL_BASE、GPIO_INT_PIN_3);
GPIOIntDisable (GPIO_PORTL_BASE、GPIO_INT_PIN_4);
GPIOIntDisable (GPIO_PORTL_BASE、GPIO_INT_PIN_5);
GPIOPinWrite (GPIO_PORTL_BASE、GPIO_PIN_3、GPIO_PIN_3);
GPIOPinWrite (GPIO_PORTL_BASE、GPIO_PIN_4、GPIO_PIN_4);
GPIOPinWrite (GPIO_PORTL_BASE、GPIO_PIN_5、GPIO_PIN_5);
TimerLoadSet (Timer1_base、timer_A、120001 * slider_E_1);
}
void gpioIntHandler (void){
/*启用计时器*/
GPIOIntClear (GPIO_PORTF_BASE、GPIO_HIGH_LEVEL);
TimerEnable (TIMER0_BASE、TIMER_A);
}
void gpioIntHandler1 (void){
/*启用计时器*/
GPIOIntClear (GPIO_PORTG_base、GPIO_HIGH_LEVEL);
TimerEnable (TIMER3_base、TIMER_A);
}
void gpioIntHandler2 (void){
/*启用计时器*/
GPIOIntClear (GPIO_PORTL_base、GPIO_HIGH_LEVEL);
TimerEnable (TIMER2_base、TIMER_A);
}
void timerIntHandler (void){
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、0);
/*清除计时器中断源*/
TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);//断点 hier setzen ABI *
}
void timerIntHandlerTimer1 (void){
TimerIntClear (TIMER3_base、TIMER_TINA_TIMEOUT);
GPIOPinWrite (GPIO_PORTG_base、GPIO_PIN_0、0);
}
void timerIntHandlerTimer2 (void){
TimerIntClear (TIMER2_base、TIMER_TINA_TIMEOUT);
GPIOPinWrite (GPIO_PORTL_BASE、GPIO_PIN_4、0);
}



