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.

[参考译文] C5515 eZdsp Timer1 ISR 从未调用-无 CSL

Guru**** 2544960 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/598996/c5515-ezdsp-timer1-isr-never-called---no-csl

您好!

我尝试在不使用 CSL 的情况下使用 C5515 eZdsp 板中的计时器(Timer1)。

我已定义:

timers.h

//定义定时器寄存器(Timer1)

#define TCR1 *(ioport volatile unsigned *)(0x1850)
#define T1PRD1 *(ioport volatile unsigned *)(0x1852)
#define T1PRD2 *(ioport volatile unsigned *)(0x1853)
#define T1CNT1 *(ioport volatile unsigned *)(0x1854)
#define T1CNT2 *(ioport volatile unsigned *)(0x1855)
#define IERT1 *(ioport volatile unsigned *)(0x1816)
#define TIAFR *(ioport volatile unsigned *)(0x1C14)

void init_timer (void);
void start_timer (void);
void stop_timer (void);

定时器.c

void init_timer(){
TCR1 = 0x8000;
// PRD 1秒 Con CPU a 100 MHz
T1PRD1 = 0x86A0;//lsw
T1PRD2 = 0x000F;//MSW
}

void start_timer(){
TCR1 = 0x8001;
}


void stop_timer (void){
TCR1 = 0x8000;
}

我的主代码的重要部分:

(笑声)
init_timer();
start_timer();
while (1);
...
(笑声)
中断空 Timer_ISR (空){
printf ("\n 中断\n");
} 

我在 vector.asm 中定义了 Timer_ISR、如下所示:

全局_定时器_ISR...

(笑声)
.sect "vector"
.align 256...

(笑声)
TINT1:.ivec _Timer_ISR;计时器#0/软件中断#4

100MHz 时的 PLL

永远不会调用我的 ISR Timer_ISR。

有什么建议吗?

非常感谢

Paolo

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

    我已将此内容转发给 C55x 软件专家。 他们的反馈应发布在此处。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我自己解决了这个问题、并非没有困难:

    timers.h

    #include "data_types.h"
    //定义计时器寄存器(Timer1)


    #define TCR1 *(ioport volatile unsigned *)(0x1850)
    #define T1PRD1 *(ioport volatile unsigned *)(0x1852)
    #define T1PRD2 *(ioport volatile unsigned *)(0x1853)
    #define T1CNT1 *(ioport volatile unsigned *)(0x1854)
    #define T1CNT2 *(ioport volatile unsigned *)(0x1855)
    #define IERT1 *(ioport volatile unsigned *)(0x1856)
    #define TIAFR *(ioport volatile unsigned *)(0x1C14)

    定时器.c

    #include "timers.h"
    #include "data_types.h"

    void init_timer(){//计时器每秒生成一个中断
    TCR1 = 0x8000;//禁用自动回放
    // PRD 1秒 Con CPU a 100MHz -->每20ns 1个周期
    T1PRD1 = 0xF080;//LSW
    T1PRD2 = 0x02FA;//MSW
    T1CNT1 = 0x0000;
    T1CNT2 = 0x0000;
    TIAFR = 0x0007;//清除计时器聚合寄存器
    IERT1 = 0x0001;//启用 timer0 int 标志


    void start_timer(){
    TCR1 = 0x8001;



    void stop_timer (void){
    TCR1 = 0x8000;


    定时器 ISR:
    中断空 Timer_ISR (空){
    //静态 uint8 sec_counter = 0;
    IFR0 = IFR0&0x0010;//清除计时器内部标志
    IERT1 = 0x0001; //清除 timer0 int 标志
    TIAFR = TIAFR|0x0001;//清除计时器聚合寄存器中的 Timer0位
    (笑声)
    (笑声)