This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] EK-TM4C1294XL:是否可以同时进行三次单次击球?

Guru**** 2482225 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/722252/ek-tm4c1294xl-is-it-possible-to-shoot-three-single-shots-at-the-same-time

器件型号:EK-TM4C1294XL
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);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ferhat、
    尝试在 timer_start()的开头添加以下行。

    SysCtlPeripheralReset (SYSCTL_Periph_TIMER0);
    SysCtlPeripheralReset (SYSCTL_Periph_TIMER2);
    SysCtlPeripheralReset (SYSCTL_Periph_TIMER3);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    你们太棒了!!! 非常感谢它现在的工作原理。  

    此致。

    Yaman