介面設計專題實務 Object Teaching of Interface Design 實驗五 CPU 計時器實驗

10
介介介介介介介介 Object Teaching of Interface Design 實實實 CPU 實實實實實 實實實實 實實實

description

介面設計專題實務 Object Teaching of Interface Design 實驗五 CPU 計時器實驗. 授課教師:任才俊. 實驗目的. (a) 熟悉 F2812 的 CPU 計時器。 (b) 掌握 F2812 的 CPU 計時器的控制方法。 (c) 學會使用 CPU 計時器中斷方式控制程式流程。. 實驗說明. F2812 的 CPU 計時器不同於事件管理器模組 (EVA 、 EVB) 中的通用計時器 (GP) 。 - PowerPoint PPT Presentation

Transcript of 介面設計專題實務 Object Teaching of Interface Design 實驗五 CPU 計時器實驗

Page 1: 介面設計專題實務 Object Teaching of Interface Design 實驗五  CPU 計時器實驗

介面設計專題實務 Object Teaching of Interface Design

實驗五 CPU 計時器實驗

授課教師:任才俊

Page 2: 介面設計專題實務 Object Teaching of Interface Design 實驗五  CPU 計時器實驗

實驗目的 • (a) 熟悉 F2812 的 CPU 計時器。• (b) 掌握 F2812 的 CPU 計時器的控制方法

。• (c) 學會使用 CPU 計時器中斷方式控制程

式流程。

Page 3: 介面設計專題實務 Object Teaching of Interface Design 實驗五  CPU 計時器實驗

實驗說明 • F2812 的 CPU 計時器不同於事件管理器模組

(EVA 、 EVB) 中的通用計時器 (GP) 。• F2812 的 CPU 共有三個計時器,其中, CPU 計

時器 1 和 2 被保留用做即時操作系統 OS( 例如DSPBIOS) , CPU 計時器 0 可以供用戶使用。

• 計時器的一般操作如下:將週期暫存器 PRDH: PRD 中的值裝入 32 位元計數器暫存器 TIMH: TIM 。 然 後 計 數 器 暫 存 器 以 F281x 的SYSCLKOUT 速率遞減。當計數器減到 0 時,就會產生一個計時中斷輸出信號 ( 一個中斷脈衝 ) 。

Page 4: 介面設計專題實務 Object Teaching of Interface Design 實驗五  CPU 計時器實驗

/*************************頭文件 *********************************/#include "DSP281x_Device.h" // DSP281x Headerfile Include File#include "DSP281x_Examples.h" // DSP281x Examples Include File

/*************************定義函數說明 ***************************/// Prototype statements for functions found within this file.interrupt void cpu_timer0_isr(void);

/*************************主程序 *********************************/void main(void){// PLL, WatchDog, enable Peripheral Clocks// This example function is found in the DSP281x_SysCtrl.c file. InitSysCtrl();

// Disable CPU interrupts DINT;

// Initialize the PIE control registers to their default state. InitPieCtrl(); // Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000;

Page 5: 介面設計專題實務 Object Teaching of Interface Design 實驗五  CPU 計時器實驗

// Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR). InitPieVectTable();

// Interrupts that are used in this example are re-mapped to// ISR functions found within this file. EALLOW; // This is needed to write to EALLOW protected registers PieVectTable.TINT0 = &cpu_timer0_isr; EDIS; // This is needed to disable write to EALLOW protected registers

InitCpuTimers(); // For this example, only initialize the Cpu Timers

// Configure CPU-Timer 0 to interrupt every second:// 100MHz CPU Freq, 1 second Period (in uSeconds) ConfigCpuTimer(&CpuTimer0, 150, 1000000); StartCpuTimer0();

// Enable CPU INT1 which is connected to CPU-Timer 0: IER |= M_INT1;

// Enable TINT0 in the PIE: Group 1 interrupt 7 PieCtrlRegs.PIEIER1.bit.INTx7 = 1;

// Enable global Interrupts and higher priority real-time debug events: EINT; // Enable Global interrupt INTM ERTM; // Enable Global realtime interrupt DBGM

Page 6: 介面設計專題實務 Object Teaching of Interface Design 實驗五  CPU 計時器實驗
Page 7: 介面設計專題實務 Object Teaching of Interface Design 實驗五  CPU 計時器實驗
Page 8: 介面設計專題實務 Object Teaching of Interface Design 實驗五  CPU 計時器實驗

for(;;){ if(CpuTimer0.InterruptCount<1)

{asm(" nop ");*(int *)0x88001=0x0081;

}else if(CpuTimer0.InterruptCount<2){

asm(" nop ");*(int *)0x88001=0x0042;

}else if(CpuTimer0.InterruptCount<3){

asm(" nop ");*(int *)0x88001=0x0024;

}else if(CpuTimer0.InterruptCount<4){

asm(" nop ");*(int *)0x88001=0x0018;

}

else if(CpuTimer0.InterruptCount<5){

asm(" nop ");*(int *)0x88001=0x0024;

}else if(CpuTimer0.InterruptCount<6){

asm(" nop ");*(int *)0x88001=0x0042;

}else if(CpuTimer0.InterruptCount<7){

asm(" nop ");*(int *)0x88001=0x0081;

}else

CpuTimer0.InterruptCount = 0;

}}

Page 9: 介面設計專題實務 Object Teaching of Interface Design 實驗五  CPU 計時器實驗

interrupt void cpu_timer0_isr(void){

CpuTimer0.InterruptCount++;

// Acknowledge this interrupt to receive more interrupts from group 1PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

}

Page 10: 介面設計專題實務 Object Teaching of Interface Design 實驗五  CPU 計時器實驗

練習題• 更改範例程式,試以開關 1 設定 LED 每 0.5 秒動作一次;試以開關 2 設定 LED 每 1 秒動作一次;試以開關 3 設定 LED 每 2 秒動作一次;試以開關 4 設定LED 每 3 秒動作一次。 ( 不可利用中斷除頻 )

• 設計一個跑馬燈,以遞增的方式亮燈,讓 8 顆 LED依序點亮,開關 1 設定 LED 每 0.5 秒動作一輪;試以開關 2 設定 LED 每 1 秒動作一輪;試以開關 3 設定 LED 每 2 秒動作一輪;試以開關 4 設定 LED 每 3秒動作一輪。 ( 不可利用中斷除頻 ) 。