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.

TMS320F28377D: 定时器

Part Number: TMS320F28377D

我现在在main函数中的for函数中加入连接的串口触摸屏的按键,我想通过按键控制定时器的开关,但现在一运行就会强制跳转到开启定时器那一行,这是为什么

  • 按键是通过什么方式来检测的?中断还是轮询?

  • for(;;)
    {
    DELAY_US(10000);
    while(rdataB[5]==0xFFFF);
    DINT;
    switch (rdataB[5])
    {
    case 0x01:

     StartCpuTimer0();
    scia_xmit_int(clear_text, 7);
    write_fx_word(Sample_Data_A.fx, Sample_Data_B.fx, Sample_Data_C.fx);
    Data_Storage1(&Sample_Data_A);//处理第五组数据
    break;
    case 0x02:
    scia_xmit_int(clear_graph, 6);
    write_tc_word(Sample_Data_A.Tc,Sample_Data_B.Tc,Sample_Data_C.Tc);
    write_Br_1word(Sample_Data_A.Br);
    int i;
    for(i=0;i<650;i=i+1)
    {
    if (Sample_Data_A.Sample_Mode == 3 && Sample_Data_B.Sample_Mode == 0 && Sample_Data_C.Sample_Mode == 0)
    {
    sendgraph(CH_SET, &Sample_Data_A.Tc_Data[2][i], &Sample_Data_B.Tc_Data[2][i], &Sample_Data_C.Tc_Data[2][i]);
    }
    }
    break;

    default:
    break;
    }
    rdataB[5]=0xFFFF;
    EINT;
    }
    }

    串口中断,根据switch判断按了那个按键,开启定时器写到那个按键就直接运行那个按键,不知道是什么原因,是不是定时器中断优先级高于串口接收中断的优先级

  • for(;;)
    {
        DELAY_US(10000);
        while(rdataB[5]==0xFFFF);
        DINT;
        switch(rdataB[5])
        {
            case 0x01:
            StartCpuTimer0();
            scia_xmit_int(clear_text, 7);
            write_fx_word(Sample_Data_A.fx, Sample_Data_B.fx, Sample_Data_C.fx);
            Data_Storage1(&Sample_Data_A);//处理第五组数据
            break;
    
            case 0x02:
            scia_xmit_int(clear_graph, 6);
            write_tc_word(Sample_Data_A.Tc,Sample_Data_B.Tc,Sample_Data_C.Tc);
            write_Br_1word(Sample_Data_A.Br);
            int i;
            for(i=0;i<650;i=i+1)
            {
                if (Sample_Data_A.Sample_Mode == 3 && Sample_Data_B.Sample_Mode == 0 && Sample_Data_C.Sample_Mode == 0)
                {
                    sendgraph(CH_SET, &Sample_Data_A.Tc_Data[2][i], &Sample_Data_B.Tc_Data[2][i], &Sample_Data_C.Tc_Data[2][i]);
                }
            }
            break;
    
            default:
            break;
        }
        rdataB[5]=0xFFFF;
        EINT;
    }

    但现在一运行就会强制跳转到开启定时器那一行

    你的意思是按了按键之后,代码就会运行到第9行的‘StartCpuTimer0();’处吗?

  • 对的,我在这一行之前加了个累加的变量,这个表量被执行了

  • 程序没什么问题吧?跳到这个case说明你按下的就是相应的按键。

    而且这里也不存在中断问题吧?

  • 烧进去程序之后,一点运行,程序直接跑到开启定时器那行,没触摸按键也会执行

  • 根据代码来看,程序是通过rdataB[5]这个数组来判断按键状态的。它的初始值赋的就是0xFFFF吧?如果没有按键被按下,程序就卡在了第4行的while循环判断处。

    我建议通过打断点的方式观察一下rdataB[5]的变化情况。

    代码之前有按照预期运行起来吗?按键有没有做消抖处理?