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);

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

    假设你的“个单球” 是一个笑话,或者... “用言语来玩”…… 或者只是"瞬间措辞"。    您能启迪吗?

    我现在没有时间提供"完整/正确"的答案。   (稍后-傍晚(美国- CST)我可能能够放大...)

    这里-我的一些关键发现:

    • 您采用了'GPIOPinWrite()'-但这是一 个'添加时间和代码'的反向!    而不是艾滋病、您的目标...
    • 是-每个计时器都有'2'专用 I/O 引脚-当配置为一次性模式(输出)时 、  您无需 实现 GPIO -也无需 实现 GPIOPinWrite()!   为  您提供每个计时器输出(效率更高、更自动)!   (边沿计数和边沿计时操作期间、同一定时器引脚切换到"输入模式"-并 PWM 和单次触发期间变为"输出"!)
    • 要生成全部3个此类计时器信号-同步-我怀疑取决于:
    • 软件调用函数的功能-同时启用'All 3 Timer'-然后每个计时器的响应被证明是相等的
    • 如果不存在软件函数来实现此类"多、同步定时器"触发功能"-您可能需要使用"TRM"编码
    • 要使'HRM'或(偶数)'ASM' 成功- 需要'同步'使能多个定时器'的功能 必须(驻留在 )在单 个定时器寄存器中。  (这允许您通过 个功能调用同时切换"全部3个"定时器"控制/使能位"!

    必须注意的是、您的"有点大"时序图显示了每个(以下)计时器输出"等待其前代产品完成"的"延迟"-这当然是/不是您的目标。

    提供的线索应能最好地解决(您)此问题。   再说一次- MCU 的定时器寄存器的结构(可能提供-也可能不提供)提供了"多、同步定时器启用"、这是(实际上)这里的"大问题"(实际上是整个交易)!

    作为一种(效率低得多)变通办法(几乎)-您可以通过单个函数调用写入3个 GPIO -所有3个 GPIO 将响应"同步!"    尽管如此、" 您"将(享受)管理所有计时-手动。   (欢迎使用1985年-和英特尔8051 -和/或许多衍生产品...)

    [编辑] :15:50 CST -写完之后、我回顾了以下内容:

    • 您可以(轻松)实现 "两个分离计时器-命令为单次触发-和同步"(如果它们是"驻留在同一个计时器模块中!"  (基础知识、这方面)  以下是如何实现的:  

    TimerConfigure (TIMERN_BASE、(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_ONE_SHOT | TIMER_CFG_B_ONE_SHOT));
    TimerEnable (TIMERN_BASETIMER_Both);   //  C'est  très 巧妙- Mais oui?   (保证它们同时启用-因此同步!!)

    然而-简单快捷-它满足了您三分之二的"欲望"。
    为了"模拟"缺失第三个-在计时器 API 的接收器中有一个软件函数。    ( 劳伦斯女士在"饥饿游戏"中精心佩戴/模仿的"归档者"。)

    因此、在初始化第二个计时器后(我建议对上述计时器进行完全复制)、生成两个同步的(但尚未)"拆分计时器"、以 实现轻松和一致性。
    因此、我的方法提供四次"同步一次"-仅限两次的"代码价格"!    (并应颁发两 个"这一决心"奖!)

    和(现在)为了实现所需的(三个甚至四个)同步单次-这个(位有问题)软件函数被部署:

    定时器同步(uint32_t ui32Base、 uint32_t ui32Timers)

    参数:
    ui32Base 是定时器模块的基址。   此(第一个)参数必须是   Timer0的基址。    (换句话说、TIMER0_BASE)。
    ui32Timers 是要同步的一组计时器。  *** CB1 -只要您为第一个参数部署'TIMER0_BASK',您就可以“避免”使用它-包含在“同步计时器”中!)

    TimerSynchronize()中的'magic'是 ,它“允许对'TimerEnable()'进行背靠背函数调用”-以逃避 第1和第2  (甚至第3或第4次)之间施加的(正常/预期)延迟-此类函数调用...

    将此"计时器同步"限制为"强制使用 Timer0"是"有限制的"-但(可能)您可以选择两个(其他)计时器(再次设置为拆分计时器)、 然后所有四个拆分计时器 都同步!)
    它们都不能是(可怕的) 'Timer0'。    

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

    您好!

     根据 CB1的建议,您需要使用 TimerSynchronize() API 来指定要与相同时基同步的计时器。 有关 API 使用的详细信息、请参阅外设驱动程序库用户指南。  

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

    您好、Charles、

    人们担心、您的面包车-从(被淹没的) FLA "钥匙"中移走仅一年-导致/促成了奥斯汀东部的大规模交通拥堵。 (可能不会)

    您是否可以评论-关于(或许)实现同步的"原始/资源丰富的方法"。 (每个"半定时器"中的任意定时器)

    TimerConfigure (TIMERN_BASE、(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_ONE_SHOT | TIMER_CFG_B_ONE_SHOT));
    TimerEnable (TIMERN_BASE、TIMER_Both);// C'est très 巧妙- Mais oui? (保证它们同时启用-因此同步!!)

    我相信-如果正确设置和配置-然后如图所示被调用-即使没有使用'TimerSync()'函数-这两个(共借记)一次性计时器输出将是... 很好的同步!

    最后-由于您的状态是"开放式进位"-请您... 有没有同时拍摄-三次"单次拍摄"?

    谢谢您-

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    是的、您答对了、这样做是因为 TAEN 和 TBEN 位于同一个寄存器中。 当定时器模块的两个半定时器都被使能时、它们被隐式同步。 但是、如果 OP 想要生成三个 PWM、那么他仍然需要在多个计时器模块之间使用同步功能。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答。

    我真的很抱歉、但我认为我描述了我需要的错误。

    我需要的是这样的:

    我希望完全独立地启动脉冲信号。 我想在前一个停止前启动下一个停止。 但现在、我的下一个信号在前一个信号结束前不会开始。

    很抱歉我的表达方式不好。

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

    Ouch - 尽管从技术上讲-您的新绘图确实适合-不在您的帖子的主题行中!   (拍摄3次@同时-是的、您的绘图符合该描述。)

    也就是说、当您"重新注入"您的第一幅画(略大的画)时、您的读者认为您(曾经)在同步之后是合理的!  ("同时"(通常)建议同步!)

    让我们看看您最初发布的文章的措辞:  

    • "我想制作三张单张照片... 占空比是可变的。"   
    • "在单次触发模式中配置了三个计时器。"
    • "但是、一次投球会一个接一个-而不是同时进行。"  

    我认为"更好的措辞"是"一个镜头重叠"、而不是"同时"主题行。   ("重叠"的使用避免了"同步编辑"的建议)

    这样说-这是一种"合理"的攻击方法(人们认为是什么):

    首先是设置/配置。 仅限 三个计时器!   (注意:如果在(相同)计时器中使用半个计时器、则会同步、从而违反您的意愿。)

    • 配置并"准备就绪"三个计时器-设置为单次触发模式
    • 根据我的过帐(上面)-无需 GPIO 输出-每个计时器提供其自己的输出
    • 请注意、"单次触发"定时器模式提供 频率或占空比的"无/零"(直接控制)!  只有这样、"单脉冲持续时间"是可控的!  (您必须控制"调用计时器启用"的频率(用于频率控制)并设置"TimerLoadSet"参数(用于占空比控制)。   不是特别有趣的任务!
    • 确保所有三个计时器当前均已禁用(所有计时器输出均已关闭!)

    完成后-出现(现在)"重叠"输出:

    • 启用您的第一个计时器 (它将立即开始输出)
    • "立即"-或在延迟一段时间后-启用您的第二个计时器 (它也将立即开始输出)
    • 重复计时器3的启用-与上面的计时器2完全相同

    要点-供您考虑:

    • 设置为"单次触发"的计时器将在启用后立即输出
    • 计时器输出将根据参数 w/in 、"TimerLoadSet()"-请注意、这是一个"一个并完成"事件。  (您必须再次调用计时器使能以输出)
    • 对每个计时器连续的“调用”,“计时器启用()” -将(可能)启动最新计时器,而较早计时器持续存在

    预期您仍有 GPIO 写入计时器的(不正确)"混合"。   正如我的第一个帖子详述的-不需要 GPIO 和'GPIO 写入'!   每个计时器都有一个专用的输出引脚、不应将其设置为 GPIO 输出。  (因为它显然-不再-将作为 GPIO 执行)

    请注意-"你和你一个人"已经确定、"一次性计时器模式"证明是最好的!   由于这种方法的巨大需求-尤其是 当这些定时器信号"小"或更糟糕的是周期性"时-我很担心 您"选择错误"-并且"周期定时器模式"的运行(自动执行频率和占空比)  证明非常出色。  再一次-海报提供了"数据不足" (你不是单独的)-和(无)助手 crüe -可能会(不必要的)遭受痛苦!

    我认为这足以"让你走下去"。   您将受益于对第一个帖子的缓慢阅读(并重复)、其中提供了非常详细的信息。   在达成一致并理解之后-将您的注意力转移到这个帖子上-您应该(然后)能够"很好地实现您的目标..."

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    正确的是、无需配置或写入任何 GPIO 引脚。 通过改变以下三行、可以满足他所需的单次脉冲。 定时器模块具有立即设置 CCP 管脚的内置功能、超时清除管脚。

    发件人:
    TimerConfigure (TIMER0_BASE、TIMER_CFG_A_ONE_SHOT);
    TimerConfigure (TIMER3_base、TIMER_CFG_A_ONE_SHOT);
    TimerConfigure (TIMER2_base、TIMER_CFG_A_ONE_SHOT);

    至:
    TimerConfigure (TIMER0_BASE,TIMER_CFG_A_ONE_SHOT | TIMER_CFG_A_ACT_SETCLRTO);
    TimerConfigure (TIMER3_base、TIMER_CFG_A_ONE_SHOT |TIMER_CFG_A_ACT_SETCLRTO);
    TimerConfigure (TIMER2_base、TIMER_CFG_A_ONE_SHOT | TIMER_CFG_A_ACT_SETCLRTO);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    在"TimerConfigure()" (TIMER_CFG_A_ACT_SETCLTO)中输入的最终参数是(超出)我的预期。

    请注意以下几点:

    • 长期以来、员工/我一直认为"一次性"模式(自身)会导致计时器的输出(正确)熄灭!   (自动-否则名称"一次性" 证明误导!)
    • PDL 用户指南中的示例-避免使用该第三 个(新)"一次性灭火"参数!

    遵循代码示例相关部分的"真实副本"-在 PDL 中:

    //将 TimerA 配置为半宽单次触发定时器,将 TimerB 配置 为半宽边沿捕获计数器。

    TimerConfigure (TIMER0_BASE、(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_ONE_SHOT | TIMER_CFG_B_CAP_COUNT)); // 请注意、(新的)"Output f灭火"参数(您已注意到) 会出现!

    我是否可以询问是否 需要"TIMER_CFG_A_ACT_SETCLTO"参数?   (在过去 StellarisWare 中、它不存在!)   

    请注意-再次请注意 PDL 中的"真实副本":

    某些 Tiva 器件还允许在定时器达到超时时时时配置一个操作。   请参阅数据表、了解您使用的器件、以确定是否可以配置计时器上的操作。

    这表明(也许) TM4C123可能不包含此参数的使用。   (我们认识到海报没有使用'123 -但这里有很多-请!)

    注意-此参数似乎"不限定"使用"任何全宽定时器" (PDL 很难注意到"仅使用 Timer_A 或 Timer_B)    如果需要全宽定时器该怎么办?   这表明 (有点)此"灭火参数"的"用途和价值"有限-它不是吗?

    总之-是否可能-不需要参数"TIMER_CFG_A_ACT_SETCLTTO"-当计时器处于"指令进入"单次模式"时?   (这是我的感觉-读取源代码(一次性)应该会积极地揭示...)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    正确的做法是、TM4C123或更早的 Stellaris 器件中不提供此功能(使用 TIMER_CFG_A_ACT_SETCLRTO 启动和结束单次触发定时器时的引脚操作)。 这仅在 TM4C129中可用。 幸运的是、这是海报所使用的器件、否则、您的解决方案也是我能想到的唯一解决方案。 海报无法使用 GPIO 中断来设置引脚并生成中断。 GPIO 中断只能在管脚被配置为输入而不是输出时产生。

    您还存在一个有效的问题、即使用 TIMER_CFG_A_ACT_SETCLTO 会使整个计时器的使用不合格。 我想知道铁氧会生成什么脉冲持续时间。 使用16位半定时器和8位预分频器、除非需要更长的持续时间、否则有可能生成一个持续138mS 的脉冲。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 Charles -您的回答(始终)非常感谢您的回答。   (即使"我们"对含义的解释(有点不同)时、也是如此!)

    现在-对于(甚至)'129 (我已经识别-并注意-作为海报的器件-这是新的'TIMER_CFG_A_ACT_SETCLTTO'参数-真的需要吗????

    我(几乎)已经准备好"打赌你"-它(这个(不需要的)新参数)-不是用于"定时器的单次触发"模式!

    查尔斯-正如你/我/他人"长期同意"-当有疑问时-'RTFM'   而我的 TM4C1294 MCU 手册版本显示: 同样是(合法)"真实副本"

    '在单次触发模式下、定时器 超时事件后停止计数。   要重新启用计时器、请重复该序列。   配置为周期模式的计时器会重新加载计时器、并在发生超时事件后继续计数。"   虽然本手册的措辞并未(最终)"证明"(计时器的输出已"消失")-(极不可能)更改(适当且现有)"一次性"功能。  (要求在什么位置添加该(新)参数?)

    因此-看起来-(新的)"定时器熄灭功能"在"一次性"-"定时器配置"功能中不应该存在!   

    因此-我之前在海报上的代码建议(重定时器配置) -证明是正确的!   (请注意、某些"非工程学校"-开发"批判性推理和调查技巧"-这是"知情并建议"我的指导-在本主题中介绍。)

    多年来 ,超过6K5 Stellaris MCU (在现场销售/发货),我们(非常高兴)采用了“一次性模式”,就像 PDL (通知/建议)一样...  减去任何"熄灭功能!"   为什么-这个新参数-突然需要?   (很难理解!)

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

    您好 CB1、

     我不理解您为什么真正不需要 TIMER_CFG_A_ACT_SETCLTO。  TIMER_CFG_A_ACT_SETCLRTO 不会自动隐含为引脚操作。   TIMER_CFG_A_ACT_SETCLRTO  只是执行单次/周期定时器操作时可以采取的8种不同的"引脚操作"之一。 如果不指定 TIMER_CFG_A_ACT_SETCLRTO (编码为0x6)、定时器就不知道需要执行什么操作。  

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

    您好、Charles、

    在引入该(新)"熄灭功能"(计时器处于"一次性模式")之前、几乎所有 ARM MCU 供应商的行为都是一样的!   启用(启动)时、它们将其输出驱动至指定的"活动级别"-当达到指定的计时器持续时间时、计时器的输出返回到其"非活动/空闲"级别。   自2004年前后(我们首次使用 ARM)-这种情况一直是"一次性定时器模式" 的"标准操作程序"。  (或"DODU DIO"-针对那些有行为意识的人)

    对于我们过去的8051系列 MCU、LM3S 和 LX4F 以及 TM4C123、这是"正确"的。   此外、对于来自 ST、NXP、Atmel (swalled)和其他平台的(其他) ARM MCU 也是如此。   计时器在单次触发模式下的行为与'555 IC'的行为非常匹配-在"单次触发或单次触发模式"下、当输出恢复为低电平时、该器件会将其输出驱动为高电平、直到超时为止。

    据信、(低)'123 MCU -和(早期) LX4F 和 LM3S -每一个都提供了在 命令进入"单次触发"模式时指定计时器的"活动状态"的方法。   因此-此新参数的"优点"-显示(最多)不足。   并且实现方式"深思熟虑" -任何完全定时器(在单次触发模式中)的使用-现在被阻止了!   (是否可以询问-"深思熟虑和/或考虑"设计的标记?)

    最后-我们应该"向下"到()"选项"-值0x4-0x7 -显示(令人震惊)类似  例如:

    • '0x4' 设置 CCP &切换超时 ...  然而、  设置 CCP 并在超时清零的'0x6'不一样吗?   它们是相同的-它们是不是?
    • '0x5' 清除 CCP &切换超时 ...  "0x7" 清除 CCP 并设置超时。   再说一次-它们完全相同!
    • 较小的值"0x0-0x3"会将我作为(赦免)对象进行攻击、但兑换的值极少(可能不)!   (它们太“模糊”了——你(必须)认识到…… 尽管我了解您(必要)对"删除"的渴望)

    我的团队可以使用 我们的123 MCU 实现由(合法)值"0x4-0x7"表示的每个/每个"单次触发"选项、同时继续使用任何完整计时器!   因此我们什么都没输!

    当您寻求"理由"时、是否不需要注意此(新)参数传递了未提及的内容:

    • 'PDL 用户指南- 'One-shot' 计时器编程示例  
    • API 中的所有定时器示例(在 TivaWare 下)
    • MCU 手册非常详细地介绍了计时器在单次触发模式下的编程、但从未(甚至)针对这个(晶粒)新(高度重复)参数的"提示"

    希望我的"逻辑/理由"(更多)清晰。   我的团队"不受"束缚"、可以用"无偏见的眼睛和心态"来看待-并识别皇帝的(新)衣服*-(严重) "缺乏!"

    * (品牌名称:“参数”... (笑声) 如果你“看见了一位不穿衣服的皇帝”——我的公司提供定制的设备——这使得…… “偷眼!”)

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

    我非常感谢大家的回答。

    我将在星期四和星期五尝试几件事、并告诉您它是否正常工作。

    再次感谢、敬礼。

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

    您好 CB1、

    [引用 USER="CB1_MOBILE"]

    • '0x4' 设置 CCP &切换超时 ...  然而、  设置 CCP 并在超时清零的'0x6'不一样吗?   它们是相同的-它们是不是?
    • '0x5' 清除 CCP &切换超时 ...  "0x7" 清除 CCP 并设置超时。   再说一次-它们完全相同!
    • 较小的值"0x0-0x3"会将我作为(赦免)对象进行攻击、但兑换的值极少(可能不)!   (它们太“模糊”了——你(必须)认识到…… 尽管我了解您(必要)对"删除"的渴望)

    [/报价]

    事实上,它们是类似的。 我不知道0x4和0x6背后的真正原因。  

    就0x-03而言、它们有其用途。 默认情况下、0x0不是引脚操作。 0x1-0x3只能在超时后置位、清零或切换引脚。 我想它们的有效性将取决于应用。 用户应探索如何在其应用中使用它们。  

    [引用 USER="CB1_MOBILE"]

    当您寻求"理由"时、是否不需要注意此(新)参数传递了未提及的内容:

    • 'PDL 用户指南- 'One-shot' 计时器编程示例  
    • API 中的所有定时器示例(在 TivaWare 下)
    • MCU 手册非常详细地介绍了计时器在单次触发模式下的编程、但从未(甚至)针对这个(晶粒)新(高度重复)参数的"提示"

    [/报价]

     该示例只是一个示例。 我不希望该示例显示所有支持的参数。 API 和数据表中介绍了所有参数。 PDL 中显示的定时器模块示例可能是在 Stellaris 时间内创建的、此时新功能尚不可用。 但是、API 确实提到这些新参数取决于器件。 我想您不会找到所有 TivaWare 示例中详尽使用的所有参数。   

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

    感谢 Charles -请接受我的"结论"-添加此(新)参数"没有充分(或详尽)的想法!"

    的确-正如我所清楚地指出的-并且您已经同意-'数值0x4到0x7'是重复的-和'数值0x0到0x3'-是最小的(好奇的)并且更有可能-不存在品质因数!    

    这证明了-以前从未/曾经有过多个(其他) ARM MCU 供应商的 StellarisWare、软件和 API -"感受需求"-用于 "创建这样一个(重复)"一次性计时器" swamp!"   (没有明显的好处!)   此外、"高度提升 的完整计时器"似乎具有"转义注释"、甚至更糟糕的是呈现(静音)或"不再可用!"   
      
    在结束时-'0x0'的'默认/复位'设置特别恶劣!    (因为它 可以确保"正常/习惯" 一次性 操作 被"阻止/失败!")   更好的默认设置 (很明显)是值"0x4"-它 将使"129的"计时器单次触发"模式与所有现有(已知和预期) (近)通用 - 单次触发计时器实现方式保持一致!

    增加了复杂性-没有/没有好处!   这是 很难解释或证明的!    (此处需要纪念。)

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

    您好 CB1、

     以下是数据表中的说明。 首先、引脚操作仍可在32位计时器模式下执行、但仅限于偶数引脚。 第二段介绍了不同引脚操作的可能用法。 可以生成周期性中断、但会将脉冲生成限制为第一个中断。 还可以通过更改超时周期和引脚操作来创建可变占空比 PWM。  

    定时器比较操作模式
    定时器比较模式是 GPTM 现有单次触发和周期模式的扩展。 这种情况
    当应用在未来的某个时间需要改变引脚状态时、可以使用模式、
    无论处理器状态如何。 当 PWM 模式为时、比较模式不工作
    并且与 PWM 模式是互斥的。 比较模式在 TAMR 时启用
    该域设置为0x1或0x2 (单次触发或周期)、TnAMS 位为0 (捕获或比较模式)、以及
    在 GPTM Timer n 模式(GPTMTnMR)寄存器中、TCACT 域不为零。 具体取决于
    TCACT 编码时、计时器可以在相应的 CCPn 引脚上执行置位、清零或切换
    发生计时器匹配。 在16位模式中、相应的 CCP 管脚可以应用一个动作、但是
    在32位模式下运行时、此操作只能应用于偶数 CCP 管脚。


    启用 GPTM 时、可以更改 TCACT 域以生成不同的组合
    操作。 例如、在周期事件期间、可以使用编码 TCACT = 0x6或0x7来强制
    CCPn 管脚在第一个中断之前以及之后的初始状态、TCACL=0x2、TCACL=0x3
    可被用于(交替)改变引脚的感测、以便在可能的情况下进行后续切换
    为下一个周期更改加载值。


    用于单次触发和周期模式的超时中断用于比较操作模式。
    因此、如果适当的屏蔽位被置位、GPTMRIS 寄存器中的 TnTORIS 位就会被触发
    寄存器中的位。

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

    您好、Charles、

    谢谢-非常感谢。

    您的写作无可争辩地详细-我和其他人从未感觉到(甚至在之后)我们25年以上的"MCU"一次性操作-是如此"增强"的要求。 我不确定(任何)、但最受"一次性"启发的用户将能够利用这些功能-许多人必须"好奇"-这种努力为什么会花费(曾)。

    您在"深入"方面所做的努力值得赞赏-希望在掌握这一(新)"一次性"细节时"遇到困难"、然后您在"深入和解释"方面所做的大量努力将会使许多人受益...

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

    您好!

    `m 快速回答、但我仍然在努力解决同一个问题。

    正如前面的帖子中提到的、我删除了 GPIO 和 GPIO 中断代码行、但添加了以下代码行来设置 CCP 引脚:

    GPIOPinConfigure (GPIO_PL4_T0CCP0);
    GPIOPinConfigure (GPIO_PM0_T2CCP0);
    GPIOPinConfigure (GPIO_PM2_T3CCP0);

    GPIOPinTypeTimer (GPIO_PORTL_BASE、GPIO_PIN_4);
    GPIOPinTypeTimer (GPIO_PORTM_BASE、GPIO_PIN_0);
    GPIOPinTypeTimer (GPIO_PORTM_BASE、GPIO_PIN_2);

    由于用户 Manuel、我检查了以下引脚是否存在脉冲传播:
    -用于定时器0的 PL4
    -定时器2的 PM0
    -用于定时器3的 PM2

    我是否正确地进行了此假设、或者是否涉及其他引脚?

    问题是不会产生脉冲。

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

    我的朋友-您的帮助者(供应商的 Charles 和 I)已经提供了(很好)代码详细信息。   (因为该细节至关重要)

    也就是说、您(今天)提供的六行代码几乎没有证据证明每个计时器都需要"初始化"!

    建议您采用"亲吻"(一次一个小步骤、重点突出且可衡量(然后确认)。)

    要遵循"kiss"

    • 从三个计时器的复杂性切换到一个计时器!   (稍后-有足够的时间添加计时器2 -然后添加计时器3)
    • 提供"命令一个单个定时器"所需的完整定时器初始化代码、以:
      • 进入计时器单次触发模式
      • 加载适当的"一次性持续时间"
      • 然后启动。   (已实现-正如之前在这里写入的那样)通过'Timer Enable()'。)
      • 现在-安全/正确地"探测"选定的计时器输出引脚-以确认输出

    注意:如果您使用'16位计时器'-该计时器输出 可能 (非常)简短!   (示波器-如果可用-可提供极大帮助-应置于"单次触发"模式、以便"捕获"示波器图像。)

    这不是 -"完整、详细和清晰?"   

    MCU 的计时器引脚在返回时(30-45分钟)清晰地列出(MCU 手册)-(员工在午餐时间) -他们将确认您选择的"计时器引脚"。

    一定要采用 kiss (一次一个小的、重点突出、可测量的(然后确认)步骤!   没有(其他)方法接近(任何地方)-简单规则!

    [编辑:]  您对以下内容的使用:

    -用于定时器0的 PL4
    -定时器2的 PM0
    计时器3的 PM2  被(快裂但过了午餐)员工评定为"正确"。   

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

    您好!

     如 CB1所述、请展示您的计时器配置。 这话什么意思是不生成脉冲?  我认为您的简短代码片段没有任何问题。 我只在一个计时器上尝试它、它对我有效。 我可以在示波器上看到一个脉冲。

    int
    main (void)
    {
    //
    //将时钟设置为直接从外部晶振/振荡器运行。
    // TODO:必须更改 SYSCTL_XTAL_VALUE 以匹配的值
    板上的//晶体。
    //
    #if defined (target_IS_TM4C129_RA0)|| \
    已定义(TARGET_IS_TM4C129_RA1)|| \
    已定义(TARGET_IS_TM4C129_RA2)
    
    G_ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、40000000);
    #else
    SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
    SYSCTL_XTAL_16MHz);
    #endif
    
    //
    //必须启用 Timer0外设才能使用。
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);
    GPIOPinConfigure (GPIO_PL4_T0CCP0);
    
    //
    //设置用于显示消息的串行控制台。 这是
    //仅针对此示例程序,计时器/PWM 操作不需要。
    //
    InitConsole();
    
    
    GPIOPinTypeTimer (GPIO_PORTL_BASE、GPIO_PIN_4);
    TimerConfigure (TIMER0_BASE、TIMER_CFG_A_ONE_SHOT | TIMER_CFG_A_ACT_SETCLRTO);
    TimerLoadSet (TIMER0_BASE、TIMER_A、(g_ui32SysClock / 1000));// 1kHz
    TimerEnable (TIMER0_BASE、TIMER_A);
    
    while (1)
    {
    
    }
    } 

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

    您好、Charles、

    非常感谢您(kiss 之后)-以及"Config"中的指导海报。 "仅一个计时器"-最能保证他/她的成功。

    什么让人困惑-海报(非常)第一篇文章指出:"三个计时器输出"-现在-(以某种方式)-无输出!   我希望有一个"过去和新"代码的"混合"-和(在某处)定时器被中断。

    PER 'kiss'-特别是 per 'kiss'-深入关注'Just One '计时器-'Speds、ease, Aperied' - 海报的'Path to Success'。    海报的重点"关注细节"是(非常)非常必要的-现在和现在...  (必须承认(两者均不)供应商的 Charles -或(外部) CB1 -可能(始终)接近和潜伏...)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    我也是亲吻跟随者。 :-)我想在海报的原始代码中,他已经将引脚配置为 GPIO 模式。 现在、他正在使用由计时器控制的相同引脚。
    在最初的方法中、他将首先将 GPIO 'PL4'设置为高电平、然后等待单次触发定时器在'Timer2'中过期、以清除 Timer2 ISR 中的引脚。 然而、'PL4'被映射到'Timer0' T0CCP0、而不是 Timer2。 我怀疑在单次触发模式中使用了错误的计时器实例、即使引脚复用配置正确。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    您代表(FAR)进行的召回和努力超过了我的。

    希望(我们双方)"滥用"他的 GPIO 理念的海报。 (BTW -这种"定时器的引脚"(需要) GPIO 设置的感觉是合乎逻辑的。 只有(通过经验)-您和我知道-计时器引脚不是"GPIO 配置"。)

    您的分析似乎"敏锐"-但海报上提供的"SIX 代码行"-对他的"无电帮助 crüe!"毫无好处
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!
    再次感谢您的回答、这对我的三个计时器完全独立。 (代码位于底部)。
    但现在我有下一个问题:
    我必须在脉冲信号之间放置可变延迟。 以便所有计时器不会同时启动。 到目前为止、我已经使用了以下代码:

    void timer_start (){
    TimerLoadSet (TIMER0_BASE、TIMER_A、120001 * slider_E_1);
    GPIOPinWrite (GPIO_PORTL_base、GPIO_PIN_3、 GPIO_PIN_3);
    
    if (slider_D_1!= 0){
    SysCtlDelay (40000*slider_D_1);
    }
    
    TimerLoadSet (TIMER0_BASE、TIMER_A、120001 * slider_E_2);
    GPIOPinWrite (GPIO_PORTL_base、 GPIO_PIN_4、GPIO_PIN_4);
    IF (slider_D_2!= 0){
    SysCtlDelay (40000*slider_D_2);
    }
    
    TimerLoadSet (TIMER0_BASE、TIMER_A、120001 * slider_E_3);
    GPIOPinWrite (GPIO_PORTL_base、 GPIO_PIN_5、GPIO_PIN_5);
    IF (slider_D_3!= 0){
    SysCtlDelay (40000*slider_D_3);
    }
    } 


    但现在、延迟会破坏一切。 我尝试了一些不同的东西。 我又激活了两个计时器、并让中断访问通过脉冲信号而不是延迟来启动真实计时器。 但这也不起作用(请参阅下面的代码)。 我想错了吗? 还有其他方法可以放置延迟之类的东西吗?
    谢谢、致以诚挚的问候。

    /*
    计时器配置
    */
    void timer_GPIO_config (void){
    //启用计时器*/
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER2);
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER3);
    SysCtlPeripheralEnable (SYSCTIPH_TIMER4);SysCtlPeripheralTime_PeripheralEnable (SYSCTIPH_TIMER4)
    
    
    /*在单次触发模式下配置定时器 A *
    /定时器配置(TIMER4_base、TIMER_CFG_A_ONE_SHOT);//TIMER_CFG_A_PERIODICY_CFG_A_ONE_SHOT
    TimerConfigure (TIMER5_base、TIMER_CFG_A_ONE_SHOT);
    
    SysCtlPeripheralEnable (SYSCL_PERIPL_GPIOH);
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);
    
    GPIOPinConfigure (GPIO_PL4_T0CCP0);
    GPIOPinConfigure (GPIO_PM0_T2CCP0);
    GPIOPinConfigure (GPIO_PM2_T3CCP0);
    
    GPIOPinTypeTimer (GPIO_PORTL_base、 GPIO_PIN_4);
    GPIOPinTypeTimer (GPIO_PORTM_BASE、GPIO_PIN_0);
    GPIOPinTypeTimer (GPIO_PORTM_BASE、GPIO_PIN_2);
    
    /*注册发生中断时要调用的函数 P:355 */
    IntRegister (INT_TIMER4A、timerIntHandlerTimer4);
    IntRegister (INT_TIMER5A、timerIntHandlerTimer5);
    
    //指定的中断被启用*/
    IntEnable (INT_TIMER4A
    
    
    
    
    
    
    );IntRegister (INT_TIMER5A);* Interrupt (INT_TIMER_INT_INT_INT_INT_INTIMER) Timer543*;启用 TIMER*(INT_INT_INT_TIMER) Timer*、INT_TIMER (INT_INT_INT_INT_INT_INTIMER) Timer*
    、INT_INTIMER (INT_INT_INT_INT_INTIMER) INT_TIMER (INT_INT_INT_INT_INT_TIMER
    
    
    void timer_start (){
    TimerLoadSet (TIMER0_BASE、TIMER_A、120001 * slider_E_1);
    TimerLoadSet (TIMER2_base、timer_A、 120001 * slider_E_2);
    TimerLoadSet (TIMER3_base、timer_A、120001 * slider_E_3);
    
    TimerConfigure (TIMER0_BASE、
    TIMER_CFG_A_ONE_SHOT | TIMER_CFG_A_ACT_SETCLRTO);//TIMER_CFG_A_PERIODICRARY_CFG_A_ONE_SHOT
    TimerEnable (TIMER0_BASE、TIMER_A);
    
    IF (SLIDER_D_1!= 0){
    TimerLoadSet (TIMER4_base、timer_A、120001 * slider_D_1);
    TimerEnable (TIMER4_base、TIMER_A);
    }
    否则(slider_D_1 = 0){
    TIMERConfigure (TIMER2_base、TIMER_CFG_A_ONE_SHOT | TIMER_CFG_A_ACT_SETCLRTO);
    TimerEnable (TIMER2_base、TIMER_A);
    }
    
    if (slider 2_0_D)
    TimerLoadSet (TIMER5_base、timer_A、120001 * slider_D_2);
    TimerEnable (TIMER5_base、timer_A);
    }
    否则{
    TimerConfigure (TIMER3_base、TIMER_CFG_A_ONE_SHOT | TIMER_CFG_A_ACT_SETCLRTO);
    TimerEnable (TIMER3_base、TIMER_A);
    }
    
    
    void timerIntHandlerTimer4 (void){
    TimerIntClear (TIMER4_base、TIMER_TINA_TIMEOUT);
    
    TimerConfigure (TIMER2_base、TIMER_CFG_A_ONE_SHOT | TIMER_CFG_ACT_SETRLTO
    (TIMER2_base)、TIMER2) Timer_A);
    }
    
    void timerIntHandlerTimer5 (void){
    TimerIntClear (TIMER5_base、TIMER_TINA_TIMEOUT);
    
    TimerConfigure (TIMER3_base、TIMER_CFG_A_ONE_SHOT | TIMER_CFG_A_ACT_SETCLRTO);
    TimerEnable (TIMER3_base、TIMER_A);
    } 

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

    (希望)您已经认识到无需 GPIO 写入!    再说一次-计时器提供稳定的输出-如果其(计时器)引脚切换至 GPIO、则计时器会"卷曲"!

    回忆一下我(强烈/重复)关于"亲吻!"的建议    您的最新代码显示:

    • 五个计时器-现在"正在播放"
    • 三个滑块(E1-E3)和
    • 另外三个滑块(D1-D3)

    赦免-但有很多"亲吻击败多余的"存在-和"所有这些"非关键过剩"-只是为了节省我们的时间-而(进一步的云化和复杂)我们的协助能力。

    我的目标是"帮助您开发一般问题解决技术"、而不是提供"复制/粘贴解决方案"。  (这将被"遗忘"-明天!)

    正如您所说的、 "是否还有其他方法可以放置延迟之类的东西?"   (在您的案例中-让我们添加一个词、(延迟- 叠加在三个定时器信号之间。)

    为清楚起见-您寻求3个输出-从不(或很少)一起出现-并且 在每个输出之间(很可能)有"可变"(时间间隔)。  我可以用"间隔"代替"延迟"、但(有效)含义保持不变!   

    出现框架代码-符合您的规范(我希望如此)- (未显示之前所需的"定时器初值")

    while (!Timer Loop Escape 条件){

    TimerEnable (Timer_N)//"前置"单次触发计时器-在此处启动
    呼叫延迟(可以是固定的或可变的)
    TimerEnable (Timer_N+1)//启动第二个计时器
    呼叫延迟(可以是固定的或可变的)
    TimerEnable (Timer_N+2)//启动第三个计时器
    呼叫延迟(可以是固定的或可变的)

    "Parametric loads"到"TimerEnable()& delay"-都可以"即时"完成。   这种情况可以通过"三个计时器" while 循环"进行管理、也可以在该计时器之外进行管理。   如果带输入:

    TimerLoadSet (Timer_N)
    TimerEnable (Timer_N)//首次启动计时器
    延迟加载()
    呼叫延迟(可以是固定的或可变的)

    然后、该代码块(重复)再执行两次。   请注意、您(可以也可以不)将"更新值"置于(计时器)或延迟之间-插入每个计时器。

    您尚未将"类似/版本"解释为"删除"。   当使用"在变量上锁定"(类型延迟)时、会产生一个合理的"类似"结果、因为"没有其他"(非中断)代码可能会在该时间段内执行。  您可以通过使用(另一个)计时器作为"计时器间距发生器"来"了解该限制"、该计时 器会定期"中断"。   ("设置"至周期定时器模式-该定时器集在(每个)新的"设置"时启动三个定时器中的一个。)   (即周期定时器采用"周期"、该周期设置为"等于连续定时器启动之间的"起搏"!)    

    请注意、您的"单次计时器"的"每个"都有一个"更短的持续时间"-而不是"中断-间隔计时器!"   (又名-延误-杀手!  (为您的荣誉)  (您可能需要多次阅读这些最后几段-以"巩固"其含义。)   我认为逻辑是“合理的”——尽管是星期六的前夕。 -和"成人饮料"已消费...   (我的"疼痛"和"脉冲控制"已经(几乎)静音了...)

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

    您好!

    GPIO 写入的第一个代码片段是旧代码的一个片段。 我的实际代码位于我上次答复的底部、没有任何 GPIO 写入。

    我读了很多次你的答覆,但我并不是很明白。  我怀疑是因为我缺乏英语技能, 请你向我解释一下。

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

    您好!

     我同意 CB1。 为什么不只使用一个计时器来启动? 我将补充几点意见、然后才能提供帮助。

    •  在发布之前、请单击"插入代码、附加文件等..." 在右下角窗口中"、然后单击"使用 Syntaxhlighter 插入代码"图标。 这是功能栏第二行右侧的第三个图标。 粘贴您的代码以使其可读。 如果没有缩进、当代码很长时很难读取。  
    • 我对您的上一篇帖子感到困惑。 您有两个 timer_start()。 什么是? 您在最新版本中使用哪一个?
    • 您的 main()在哪里? 我不知道您是如何调用 timer_start()的
    • 您的应用中是否更改了 SLIDER_E 和 SLIDER_D? 在我看来、这些变量正在发生变化? 如果它们在您的应用中发生变化、那么它们不再是一次性的。 当您说您想要生成单次脉冲时、如果是这样、这会令人困惑。
    • 您能否绘制一个时序图、通过标记和图例准确显示所需的单次脉冲生成方式、从而准确显示所需的内容

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

    您好!

    我编辑了我的回复并使用"使用 Syntax打火机 插入代码"编写了代码。

    从头开始:

    我有三个完全相同的电路、它们是级联的。 它们中的每一个都有一个 MOSFET。 我想使用 Tiva C 为这些 MOSFET 生成三个脉冲信号。信号的高电平以及信号之间的间隔/延迟/间隔必须是可变的。 无论第一个信号何时启动、但一旦第一个信号启动、其他两个信号的时间序列必须准确。

    通过触摸显示屏、将配置设置。 使用滑块"slider_E"可选择高电平的持续时间。 使用滑块"slider_D"可以选择脉冲信号之间的延迟。  通过显示屏上的启动图标,将启动函数"timer_start()",并将脉冲信号发送到 MOSFET。 在这些 One_Shot 后、设置将再次设置并再次发送 One_Shot。

    下面是这些 One_Shot 的外观之一:

    我希望我能对此事再多一点了解。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在70-72行中、您已经开始了一次性生成的 timer3。 在第88-89行、您再次开始单次触发。 为什么是这样?

    当您说它不起作用时、请具体说明。 您是否会显示非工作波形的捕捉?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您"提高您的回复率"给供应商/朋友"Charles"和我本人。   时间的推移-存储器消耗-需求(更大)-时间/能源投资。

    您在制作这张全新(彩色)绘图时所付出的努力和关心值得纪念和赞赏。   但是、

    [引用 user="Ferhat Yaman"]第一个信号的启动时间无关紧要,但一旦第一个信号启动,其他两个信号的时间序列必须准确

    我不知道朋友查尔斯(他是太早的周六醒来的人),但是你 的“亮点条款”——让我无法理解!   (糟糕的是、"准确"(总是致命的)进入了画面!)

    您使用"时间序列"这个词、但不能(充分)描述(或定义...或绑定)您所说的"时间序列"。   再说一次-您添加"确切"-这证明很难-当没有这种确切的信息到达时-使用您的(未描述)"时间序列!"

    "时间序列"、您的意思是:

    • 每个(有3个)单次触发定时器输出的脉冲宽度
    • 每个计时器 的"上升沿"之间的"定时间隔"
    • 每个计时器 的"下降沿"之间的"定时间隔"
    • 此"3通道序列的"周期性" (即"第一个事件"之间的"定时间隔"、包含两个(或更多)、如"定时序列"。)
    • 新图显示了完全受限(处于)的定时器1输出的定时器输出(2和3)。   这实际上是否是一项始终要求?   (工程图无法(正确)提供此类详细信息!)
    • 并且-"第一个计时器"是否始终保持在第一个计时器?   第二个计时器-第二个?    这也需要规格吗?

    什么是"未知"(并且仍然如此)、是一个计时器的输出如何(或者是否)影响(任何)其他计时器的输出?   没有指定-有吗?   该规范和清晰度证明是必要的、不是吗?

    我在上一个帖子中提供了一个简短的代码块、但没有收到(评论或反馈!)    然而、该代码启用了以下方面的"精确控制":

    • 每个单独定时器的持续时间
    • 第一个定时器(上升)输出和第二个定时器(上升)输出之间的间距
    • 第二个定时器(上升)输出和第三个定时器(上升)输出之间的间距
    • 然后重复之前的"延迟"(整个)序列。   (请注意、序列可能会继续"不变"或"选择更改"-我的代码也适用。   如果存在"频繁"序列重复-则"条件语句"可能会"轻松快捷"-该代码为"更新执行"。

    我希望我(更好)说明了"通常需要"的内容-在指定"时间序列"时。

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

    您好!  

    你是对的、70-75必须在评论之下。 我现在修复了这个问题。

    您可以在此处的图片中看到问题:

    信号二或三都将达到此峰值。  接收较长"延迟"的信号会获得该"峰值"。

    在上图中、第一个"延迟"设置为8ms、第二个"延迟"设置为11ms。
    在下图中、第一个"延迟"设置为6ms、第二个"延迟"设置为1ms。

    我不知道峰值来自哪里。  

    @CB1_MOBILE:

    用于创建脉冲信号的定时器 Timer_0、Timer_2和 Timer_3不应相互影响或相互影响。
    定时器 Timer_4应该具有启动 Timer_2的效果、而 Timer_6应该用中断来启动 Timer_3。

    因此 Timer_0应该发送一个持续时间为 slider _E1值的脉冲信号

    -如果第一个延迟大于"0"(slider_D1的值)、则 Timer_4应该在 slider_D1的值(这应该是我的延迟)时开始、并触发一个中断以 Timer_2的持续时间和 slider_E2的值来发送第二个脉冲信号。

    -如果第二个延迟大于"0"(slider_D2的值)、则 Timer_6应启动至 slider_D2的值、并触发中断以 Timer_3的持续时间和 slider_E3的持续时间发送 thrid 脉冲信号。

    所有滑块值均以毫秒为单位、范围 为0 - 100ms。

    在触摸显示屏设置所有滑块值后。 通过触摸显示屏上的"Go"图标、它应该以设置的延迟启动脉冲信号。 信号应精确到微秒。 因此、如果 slider_E1值设置为7ms、则输出信号不应具有7.1ms。

    触摸"Go"图标并发送信号后。 应该可以重新设置这些值、通过再次触摸"Go"图标、它应该用新值发出新的脉冲信号。
    我的下一个问题目前没有太多的优先级。  信号一旦发出、我就可以调整这些值、但不再有信号发出。 我已经按下微控制器上的复位按钮来发出新信号。  

    我希望我不会忘记回答您的问题之一。  如果仍有问题、请再次询问。

    再次感谢您的帮助:)

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

    善意理解-供应商的 Charles 和 I -真正寻求"帮助/协助"您的工作。   然而-即使您的帖子(就在上面)非常详细-它 会增加很多复杂性-这会"指数提升"-"时间/努力/测试"-需要解决!

    请理解并接受-尽管您:"制定完整的解决方案"-您的"提出如此多的变量(每个变量都是"问题的原因")证明(非常)"不符合您的优势!"

    应该以“亲吻”为指导。   据信(两人) Charles 和我都希望看到您:"使用三个独立计时器进行认证-正常工作"-不存在任何/所有(其他)并发症或关系!   然而,所介绍的内容是:

    • 其他计时器触发(每个)您的'Three MOSFET 驱动计时器' (虽然重要-但这目前还不是最好的!)
    • 使用(任何)滑块增加不必要的复杂性。   手动加载:每一次延迟(正如我的代码建议和实施的那样) 都可避免任何此类"产生链接的错误!"
    • 您对"计时器精度"( 7.0mS 与7.1mS)的担忧应"推回" 、 显然 现在不是您解决方案的核心。   (您的"焦点"必须拧紧!)

    再说一次-我(通常)不存在(近)"剪切并粘贴"代码-但在您的案例中却是这样做的。   (再次)收到 "对该规范没有任何反应-任何反应"。   (这并不是特别令人鼓舞的、该代码是为简单而设计的、最好是"测试验证三个 MOSFET 驱动计时器输出的定时输出"。)   

    KISS 也可能被标记为"通过细化进行处理"-您的所有三个 MOSFET 计时器都"符合规格"(通过我的代码)之后-您可以(在 KISS 下): 每个步骤中、谨慎、系统地添加"一次一个复杂要求的附加要素-小心测量并确保正确无误"。

    减去您的"遵循"这些(重复)指令-在我的继续操作中没有什么意义。   虽然(经常)海报会一次性展示所有内容-这是一个(高度)丢失的脚本-浪费时间、精力-并且不是一条 I (或其他人)寻求遵循的路径...

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

    我想我能让你明白。 我认为我不能再跟随 kiss 了、因为我的脉冲信号已经是独立的。

    但我必须遵循亲吻、而不会考虑我需要的所有额外内容的复杂性。 在 Kiss 工作后、我会逐步添加额外的内容、对吧?

    在三次重复之后、我现在就理解了(我希望^^)

    谢谢、我会一直持续到星期四、让你们随时了解最新情况。

    无论如何,我希望能得到有关我稍后不得不补充的延迟的任何提示:)

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

    感谢您-您快速(正确)地解决我们的问题-(两者)乐于助人且受到赞赏。   我公司的"理想"之一是"远程和(现场)诊断"-我们很幸运、被"认可为具有(部分)天赋-并且一直(反复参与)由 Tech Giants 负责。"   (在过去解决(不同)客户问题后、该回拨特别值得注意)

    事实上、您必须遵循"亲吻" -正如您在您的帖子(就在上面)中描述的那样(很好)(谢天谢地)。

    您寻求有关延迟的"提示"-但(仍然)-我没有收到任何关于您的"测试与验证"代码块(许多之前的过帐)所取得结果的评论。   (完全构建-代表您!)

    再次展示该代码-在这里/现在:

    出现框架代码 -符合您的规范(我希望如此)- (未显示之前所需的"定时器初值")

    while (!Timer Loop Escape 条件){

    TimerEnable (Timer_N)//"前置"单次触发计时器-在此处启动
    呼叫延迟(可以是固定的或可变的)
    TimerEnable (Timer_N+1)//启动第二个计时器
    呼叫延迟(可以是固定的或可变的)
    TimerEnable (Timer_N+2)//启动第三个计时器
    呼叫延迟(可以是固定的或可变的)

    现在在"kiss"下- "Timer Loop Escape Condition"可以设置为一个小的恒定值(例如5)。   这使得 while 循环能够执行足够的重复次数-让您"测试/验证"这个"代码块"-您的 MCU -和所有三个计时器的正确性!   该代码是故意的"元素和基本的"(正如 Kiss 所说)、旨在最大限度地取得成功!

    请注意、(上面的代码)可以在每个(while 循环)期间启用"唯一值"、也可以简单地重复初始值。   如果您寻求"更严格的计时器和延迟控制"-"参数负载"至"TimerEnable()& delay"-都可以"即时"进行。   这种情况可以通过"三个计时器" while 循环"进行管理、也可以在该计时器之外进行管理。   如果带输入:

    TimerLoadSet (Timer_N)
    TimerEnable (Timer_N)//首次启动计时器
    延迟加载()  
    呼叫延迟(可以是固定的或可变的)

    然后、该 代码块 (重复)再执行两次。   请注意、您(可以也可以不)将"更新值"置于(计时器)或延迟之间-插入每个计时器。

    我的一篇(最近的)文章提供了一个"详细的问题列表"、这会影响您对"定时序列"的含义。   尽管有详细的清单,但仍然没有收到任何答复。   同样、当"代表您"花费"时间/精力"时、一些响应能力证明了"正常/习惯"。

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

    在9月1日的帖子中、06:27出现了以下"

    [引用 USER="Ferhat Yaman"]我想使用 Tiva C 为这些 MOSFET 生成三个脉冲信号。信号的高电平以及信号之间的间隔/延迟/间隔必须是可变的。 第一个信号何时启动并不重要、但一旦第一个信号启动其他两个信号的时间序列必须准确[/引述]

    请在上面引述的论坛上重新阅读您的说明。   您已尝试指定一个、"时间序列"-并注意到"两个计时器信号(必须)是精确的。"   然而-如果您确实指定了、则"定时序列"不应"反向"(可能是全部)提供以下内容:

    • 请确认"第一个信号" 开始和/或启动计时过程。   如果"第一个信号"从计时器1流动(始终)、或者如果"它"也是可变的、则需要"锁定"。
    • 对于一个重复事件来说、它是"正常/习惯"的、作为"计时器触发器"-必须明确定义。   这里没有这样的定义--还没有达到。
    • 每次触发的宽度(其逻辑高信号电平)都是清晰的
    • 但是、您注意  到这些信号之间施加的"间隔/延迟/间隔"必须是可变的。   然而,也许更重要的是,准确地说,"这些(延迟)何时和在哪里放置?   在"正常时序图"(许多)中、"正常时序标签"出现。    这些通常由垂直线表示-(清晰地)表示:关键信号(定时)分离以及信号宽度。  您的图表-不幸的是-未能提供必要的"信号连接"-如此必要-尤其是您指定 的时间"准确!"
    • 此类图表(通常)指定(正常)时序值-并提供图表列表-显示最大、最小和典型时序值
    • 即使您的值被标记为"可变"-如果它们被"时间序列"-那么"所有此类信号"之间的"定时相互关系"必须清晰地显示。  (有些人可能会注意到-"准确地"呈现!)

    以上六个要点(应该)提供了足够的"提示"、以便您进一步分析和澄清(仅)您的目标(真正)是什么...   (再次建议您输入上面提供的代码(再次)、并确认:

    • 所有三个定时器输出到达"无干扰"
    • 您可以精确控制每个计时器输出的宽度
    • 您可以精确控制"定时器2的开始时间"、该时间(紧随其后)定时器1。   (这会保持-如果并直到-您"修改"定时器2与定时器1的(预期)行为)
    • 您可以 精确控制"定时器3的开始时间"、该时间(紧随其后)定时器2。   (完全如上)
    • 您没有提供  关于3个定时器中任何一个的"负边沿"(如果有)的"影响"的规格
    • (再次)仍然不清楚计时器是否(永远)保持这样的状态、即"计时器3之前的计时器2之前的计时器1"顺序

    希望创建(功能时序图)所需的"详细描述"已得到(合理)传达、并且理解清楚。   (没有任何东西会阻止您将 MCU 手册打开到其后面-并查看其中的(多个)时序图...)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ferhat、
    此问题现在是否已解决? 您是否有机会根据 CB1的建议在任意两个脉冲之间使用 SysCtlDelay()而不是引入另一个计时器来尝试固定延迟? 一旦您达到所需的三个脉冲、您就可以一次添加一个计时器来替换固定延迟。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    在过去两天里、我尝试了很多东西。 我将在大约3小时内给出详细的答案。 简短答案问题仍然存在。 但我发现了它的原因、感谢 Kiss 的关注、并在其中加入了额外的部分。

    此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、很抱歉、回答得太晚了。
    那么、解释导致峰值的原因有点困难。
    我有三个用于脉冲信号的计时器、对吧?
    第一个信号位于引脚 PL4上
    第二个在引脚 PM0上
    第三个信号位于引脚 PM2上
    这些引脚是我的电容补偿引脚。
    峰值仅在具有相同端口的引脚上显示。
    因此、当我从 PM2切换到 PL5时、它们之间会出现峰值。
    问题是 ccp 引脚仅在端口 M 和 L 上可用
    经过对数据表的深入研究、我发现其他引脚可以将其标准功能从例如 I2C 引脚切换到 CCP 引脚。 我必须了解如何从标准函数切换到 ccp 函数。
    那么应该可以解决这个问题。
    我会随时向您提供最新信息、并随时为您提供建议。

    此致。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    如何配置三个 CCP 管脚? 请特别说明您的代码如何调用 GPIOPinConfigure()和 GPIOPinTypeTimer()。 请注意、GPIOPinTypeTimer 将第二个参数作为位打包值。 如果您有两个 PL 引脚、如 PL4和 PL5、则应执行 GPIOPinTypeTimer (GPIO_PORTL_base、GPIO_PIN_4| GPIO_PIN_5)等操作。 如果您将其分为两行、一行用于 GPIO_PIN_4、另一行用于 GPIO_PIN_5、则不正确。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    海报(远)对我来说太不连贯-这种"开始/停止"会破坏任何(合理)流动!   并且(仍然)不能确认在我们的 TM4C123上工作的代码块(重复)。

    [引用用户="Charles Tsaaaa">如果您有两个 PL 引脚、如 PL4和 PL5、则应执行类似 GPIOPinTypeTimer (GPIO_PORTL_base、GPIO_PIN_4| GPIO_PIN_5)的操作。 如果您将其分为两行、其中一行用于 GPIO_PIN_4、另一行用于 GPIO_PIN_5、则不正确。

    您对上面的报价表示了很好的看法。   也就是说、API 不会如此有用-也许"通过以下方式找到新用户":

    • 强制将"ulti-Pin Entry"加入  GPIOPinTypexxx ()   *** 我承认-我最近没有阅读过源代码-但(怀疑-由于参数添加的"或"性质),单次输入(可能)也起作用!
    • 接受(仅限)一个到 GPIOPinConfigure()的"单引脚入口"时

    这是"高度不一致的"、即使 是"需要代码"、也必然会混淆/混淆。
    您和我通过经验"了解了这一点"。   新海报/用户-除非他们(正确)关注 API 代码示例-可能会"发生"这样 的"不一致的参数处理!"

    海报(仍然)寻求"准确"指导关于"计时器序列"-即使在" 如何传达此类序列"的(近乎)准确描述(详细的要点)之后-海报避免(任何/全部)提及合规性。   更多(友好)和响应迅速的混凝土墙等待着我的头-明天是一个(罕见)的"节外之旅"。   (正如我们"设置"我们的 Q3数字-我可能会得到100 (USD)汉堡-穿过州/省/自治区...)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    如果您将 GPIOPinTypexxx ()分隔为"名称端口"内引脚的单独行、则最后一行将覆盖之前的行。 GPIOPinConfigure()是一个引脚复用配置 API,它只能采用一个非位打包值,因为在一天结束时,在任何给定的时间都只能为器件引脚选择一个函数。

    什么类型的汉堡需要100美元? 在米其林三星餐厅?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    [引用用户="Charles Tsaa"]如果您有两个 PL 引脚、如 PL4和 PL5、则应执行 GPIOPinTypeTimer (GPIO_PORTL_base、GPIO_PIN_4| GPIO_PIN_5)类似的操作。 如果您将其分为两行、其中一行用于 GPIO_PIN_4、另一行用于 GPIO_PIN_5、则不正确。

    为什么 相同1/2宽定时器的分离 CCP 管脚配置会成为问题?  我们具有 PL4/5独立配置、一个用于输入边沿计数、另一个 PWM 输出。   功能没有问题、事实是为了区分它们、它们不是一个重合的 CCP 对。

    在阅读整个帖子和 阅读 (海报)后、BTW 已耗尽、需要预设的计时器 和 用户指定 的高精度可变延迟输入。  如果滑块 是模拟输入源、  如果没有数字显示读数来指示每个  单次触发中正在输入的每个滑块延迟周期、则会使实现(可变延迟)的难度加大(可变延迟)。 创建 3 个循环似乎要容易得多、因为 CB1在 上面布置了蓝色代码、并将 GPTM 分成3 个单独的函数调用块。  这应 提供 一个框架 、以便在 稍后 的某个日期围绕 多 个滑块输入器件进行单次拍摄。 另一件事是复位 CCP 管脚可能被用来在  触发器之间增加非常短的填充延迟。   CCP 管脚 复位需要多少个 SYSCLKS、因为 这可能是循环的需要、也可能是 while 循环 的需要。

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

    ***喜欢***这一点-和 iirc -实习生(在这里)今年夏天-雇用了两个1/2宽的计时人员-正如您所注意到的!
    当您报告"精疲力尽"-在那些"未能做到"的人的"堆尸"周围/上面(小心)步进(非常)痛苦(非定时)的终点!

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

    描述了100 (USD)汉堡-在"Tag (标签)"部分-任何可击败无明"MCU 违约"标签的东西都令人烦恼...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    HI BP101、CB1、

     刚刚检查了源代码、您说得对。 我提供错误信息的坏处。 让我们等待海报的引脚配置来了解问题的原因。  

    //
    //设置引脚类型。
    //
    HWREG (ui32Port + GPIO_O_ODR)=((ui32PinType & 1)?
    (HWREG (ui32Port + GPIO_O_ODR)| ui8引脚):
    (HWREG (ui32Port + GPIO_ODR)和~(ui8pins)));
    HWREG (ui32Port + GPIO_PUR)=((ui32PinType & 2)?
    (HWREG (ui32Port + GPIO_PUR)| ui8引脚):
    (HWREG (ui32Port + GPIO_PUR)和~(ui8引脚)));
    HWREG (ui32Port + GPIO_PDR)=((ui32PinType & 4)?
    (HWREG (ui32Port + GPIO_PDR)| ui8引脚):
    (HWREG (ui32Port + GPIO_PDR)和~(ui8引脚)));
    HWREG (ui32Port + GPIO_DEN)=((ui32PinType & 8)?
    (HWREG (ui32Port + GPIO_DEN)| ui8引脚):
    (HWREG (ui32Port + GPIO_DEN)和~(ui8引脚))); 

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

    [引用用户="Charles Tsaaa">刚刚检查了源代码、您说得对。 [/报价]

    我的天啊-第一个库斯赢得了这一系列-现在是 BP -和 CB1的无 crüe -'Out API' Monsieur Charles。

    BP -您被授予"双人"公司的"第二位"-当我们前往"日内瓦湖"时、您将获得一个"15 (美元)汉堡-以及价值85美元的机场费和天然气...

    这将是一场7月份的"第二大雪崩"-在 BP 和 CB1 (翻桌)之前、再次出现在供应商的裂缝上。   (到孩子@的家-不要-屏住呼吸...)

    [报价用户="Charles Tsaaaa">让我们等待海报的引脚配置、以了解导致问题的原因。  [/报价]

    原谅- CB1/裂缝 的工作人员都不在!   海报攻击(射击)单枪-事实证明太"偏离和未聚焦"-我们将进一步帮助(其他人)。

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

    你(们)好、现在是凌晨3点。 我醒来后看到了很多答案。 我没有 仔细阅读所有答案、但现在可以在这里发布我的全部代码。 滑块是触摸显示屏上的数字滑块。  

    /*
    *计时器配置
    */
    void timer_GPIO_config (void)
    {//void timer_GPIO_config (uint8_t * slider_E_1){
    /*启用计时器*/
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER2);
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER3);
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER4);
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER6);
    
    /*将 Timer A 配置为单次触发模式*/
    TimerConfigure (TIMER4_base、TIMER_CFG_A_ONE_SHOT);//TIMER_CFG_A_PERIODICRACY_CFG_A_ONE_SHOT
    TimerConfigure (TIMER6_BASE、TIMER_CFG_A_ONE_SHOT);
    
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);
    
    GPIOPinConfigure (GPIO_PL4_T0CCP0);
    GPIOPinConfigure (GPIO_PM0_T2CCP0);
    GPIOPinConfigure (GPIO_PM2_T3CCP0);
    
    GPIOPinTypeTimer (GPIO_PORTL_BASE、GPIO_PIN_4);
    GPIOPinTypeTimer (GPIO_PORTM_BASE、GPIO_PIN_0);
    GPIOPinTypeTimer (GPIO_PORTM_BASE、GPIO_PIN_2);
    
    /*注册发生中断时要调用的函数 P:355 */
    IntRegister (INT_TIMER4A、timerIntHandlerTimer4);
    IntRegister (INT_TIMER6A、timerIntHandlerTimer6);
    
    /*启用指定的中断*/
    IntEnable (INT_TIMER4A);
    IntEnable (INT_TIMER6A);
    
    /*启用处理器中断*/
    IntMasterEnable();
    
    /*启用计时器中断源 P:543*/
    TimerIntEnable (TIMER4_base、TIMER_TINA_TIMEOUT);
    TimerIntEnable (TIMER6_BASE、TIMER_TINA_TIMEOUT);
    }
    
    void timer_start (){
    TimerLoadSet (TIMER0_BASE、TIMER_A、120001 * SLIDER_E_1);
    TimerLoadSet (TIMER2_base、timer_A、120001 * slider_E_2);
    TimerLoadSet (TIMER3_base、timer_A、120001 * slider_E_3);
    
    TimerConfigure (TIMER0_BASE、TIMER_CFG_A_ONE_SHOT | TIMER_CFG_A_ACT_SETCLRTO);//TIMER_CFG_A_PERIODICRACY_CFG_A_ONE_SHOT
    TimerEnable (TIMER0_BASE、TIMER_A);
    
    if (slider_D_1!= 0){
    TimerLoadSet (TIMER4_base、timer_A、120001 * slider_D_1);
    TimerEnable (TIMER4_base、TIMER_A);
    }
    否则{
    TimerConfigure (TIMER2_base、TIMER_CFG_A_ONE_SHOT | TIMER_CFG_A_ACT_SETCLRTO);
    TimerEnable (TIMER2_base、timer_A);
    }
    
    if (slider_D_2!= 0){
    TimerLoadSet (TIMER6_BASE、TIMER_A、120001 * SLIDER_D_2);
    TimerEnable (TIMER6_BASE、TIMER_A);
    }
    否则{
    TimerConfigure (TIMER3_base、TIMER_CFG_A_ONE_SHOT | TIMER_CFG_A_ACT_SETCLRTO);
    TimerEnable (TIMER3_base、timer_A);
    }
    }
    
    void timerIntHandlerTimer4 (void){
    TimerIntClear (TIMER4_base、TIMER_TINA_TIMEOUT);
    
    TimerConfigure (TIMER2_base、TIMER_CFG_A_ONE_SHOT | TIMER_CFG_A_ACT_SETCLRTO);
    TimerEnable (TIMER2_base、timer_A);
    }
    
    void timerIntHandlerTimer6 (void){
    TimerIntClear (TIMER6_BASE、TIMER_TINA_TIMEOUT);
    
    TimerConfigure (TIMER3_base、TIMER_CFG_A_ONE_SHOT | TIMER_CFG_A_ACT_SETCLRTO);
    TimerEnable (TIMER3_base、timer_A);
    }
    

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

    您好!

     我不知道您的滑块值。 我只想展示的是、我没有看到您在捕获中显示的任何毛刺脉冲。 我尝试在 PL4、PM0和 PM2上生成三个一次性 PWM、以模仿您之前预期的波形。 是否在连接外部 FET 的情况下拍摄示波器画面? 如果您未连接到外部器件会怎样?您将看到什么?

     正如多次建议的那样、您能否从简单的入手? 您能否仅从 PL4和 PM0开始、而在它们之间插入固定延迟?

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

    您好、Charles、

    太棒了。 这是使用我上传的代码完成的吗?

    除了触摸显示屏和示波器外、微控制器没有连接任何其他部件。

    我会像您说的那样尝试简单。 :(

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

    我不相信这一点。 这是一个示波器!!!!  现在、我已经使用旧的示波器进行了测量、它工作正常。

    我很害怕!!! 明天、我将使用我工作的范围来衡量它。 如果没有问题、则只剩下一个问题^^

    我之前提到的问题。 设置所有设置并按下"Go"图标后、将会触发信号。

    之后、我必须按下芯片 µC 上的复位按钮进行下一次拍摄。 否则、它不会提供任何其他输出信号。  

    我已经对断点进行了分步调试。  根据调试器的进度、新值​​将被接管并传递给计时器、但不会发出信号。

    有什么像计时器复位或类似的东西吗?