Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

本实验利用Plus1 7021自带的定时计数器介绍基本编程方法,涉及到中断使用7021平台自带的HDMI显示和定时计数器功能介绍基本编程方法,涉及到中断使用, Plus17021系统提供4个通用的16位计数定时器timer0到timer3Plus1 7021系统提供4个通用的16位计数定时器timer0到timer3; 每个计数定时器都支持计数到预设值时产生相应的中断信号。

...

 

中断号

Timer0

151

Timer1

152

Timer2

153

Timer3

154

对应的32位寄存器详细介绍,请参考我们提供的文档QAC628_regfile.pdf请参考我们提供的在线技术文档资料介绍, 如下:

...

10. General Purpose Timers

这里简单介绍相关寄存器的含义,如下表所示:

 

控制寄存器

计数预值控制器

计数时钟预处理控制器

计数值控制器

 

 

 

 

 

 

 

Timer0

timer0_ctrl

bit[31:16]保留

bit[15:14] :计数时钟选择

0: 系统时钟(default)

1: STC 90KHZ 时钟

bit13 :操作方式

0:单次操作(default)

1:重复操作

bit12 : 保留

bit11 :开关控制

0:关闭计数器

1:启动计数器

bit[10:0] :保留

timer0_reload

bit[31:16]保留

bit[15:0]

16位计数预值设置

 

 

timer0_cnt

bit[31:16]保留

bit[15:0]

16位计数值

 

 

 

 

 

 

 

 

timer1

timer1_ctrl

bit[31:16]保留

bit[15:14] :计数时钟选择

0: 系统时钟(default)

1: STC 90KHZ 时钟

bit13 :操作方式

0:单次操作(default)

1:重复操作

bit12 : 保留

bit11 :开关控制

0:关闭计数器

1:启动计数器

bit[10:0] :保留

timer1_reload

bit[31:16]保留

bit[15:0]

16位计数预值设置

 

 

timer1_cnt

bit[31:16]保留

bit[15:0]

16位计数值

 

 

 

 

 

 

timer2

timer2_ctrl

bit[31:6]保留

bit[5:2] :计数时钟选择

0: 系统时钟(default)

1: STC 90KHZ 时钟

bit1 :操作方式

0:单次操作(default)

1:重复操作

bit1 : 保留

bit0 :开关控制

0:关闭计数器

1:启动计数器

timer2_reload

bit[31:16]保留

bit[15:0]

16位计数预值设置

 

timer2_pres_val

bit[31:16]保留

bit[15:0]

16位计数时钟预值设置

 

timer2_cnt

bit[31:16]保留

bit[15:0]

16位计数值

 

 

 

 

 

 

timer3

timer3_ctrl

bit[31:6]保留

bit[5:2] :计数时钟选择

0: 系统时钟(default)

1: STC 90KHZ 时钟

bit1 :操作方式

0:单次操作(default)

1:重复操作

bit1 : 保留

bit0 :开关控制

0:关闭计数器

1:启动计数器

timer3_reload

bit[31:16]保留

bit[15:0]

16位计数预值设置

 

timer3_pres_val

bit[31:16]保留

bit[15:0]

16位计数时钟预值设置

 

timer3_cnt

bit[31:16]保留

bit[15:0]

16位计数值

 

...

    unsigned int stc_config;     // 12.7

    unsignedint timer0_ctrl;    // 12.8

    unsignedint timer0_cnt;     // 12.9

    unsignedint timer1_ctrl;    // 12.10

    unsignedint timer1_cnt;     // 12.11

    unsigned int timerw_ctrl;    // 12.12

...

    unsigned int stc_63_48;      // 12.15

   unsignedint timer2_ctl;     // 12.16

    unsignedint timer2_pres_val;// 12.17

    unsignedint timer2_reload;  // 12.18

    unsignedint timer2_cnt;     // 12.19

    unsignedint timer3_ctl;     // 12.20

    unsignedint timer3_pres_val;// 12.21

    unsignedint timer3_reload;  // 12.22

    unsignedint timer3_cnt;     // 12.23

    unsigned int stcl_0;         // 12.24

...

    unsigned int atc_2;          // 12.29

    unsignedint timer0_reload;  // 12.30

    unsignedint timer1_reload;  // 12.31

};

#define STC_REG     ((volatile struct stc_regs *)RF_GRP(12, 0))

定时器控制实验需要如下3个文件,如下:HDMI显示及定时器中断控制实验需要如下3个文件,如下:

1) 安装目录 \SP7021\workspace\sp7021\ 文件夹下的main.c

...

    hw_init();

    sys_init();

disp_hdmi_init();

    timer_test_init();/*interrupt test api */

    sp_interrupt_setup(); /* interrupt manager module init */    while(1_setup(); /* interrupt manager module init */

    while(1);

}

Step1:首先时系统及硬件初始化:hw_init();sys_init();

Step2: HDMI 显示初始化设置disp_hdmi_init(),如下:

void disp_hdmi_init()

{

    sp_disp_init();

    sp_enable_log_to_osd();

    sp_osd_draw_string("Display and Timer test...",240,50,20,113);

}

首先时系统及硬件初始化:hw_init();sys_init();

sp_enable_log_to_osd()的功能实现将串口调试信息printf()送到HDMI显示接口;

sp_osd_draw_string()的功能实现在HDMI显示画面的指定坐标位置显示ASCII字符

Step3: 然后时调用timer.c中定义的计数定时器初始化函数timer_test_init();

Step4: 最后调用系统中断管理函数sp_interrupt_setup();

...

是对应的中断处理函数操作,将中断的次数显示在IDE 环境的Terminal窗口,如图所示。环境的Terminal窗口,同时也送到HDMI终端显示。

 

void timer_test_init()

{

    static interrupt_operation timer3_opt;

...