- [cpp] view plaincopy
- #include <hidef.h> /* for EnableInterrupts macro */
- #include "derivative.h" /* include peripheral declarations */
-
- //TPM中断实验,LED1灯每一秒钟闪烁一次?
- //1:时钟来源选择 TPM1SC中的 CLKS[B:A]
- //2:可编程的时钟分频器,通过设置TPM1SC中的PS位。
- //3:开中断。TPM1SC中的TOIE位?
- //4:16位的计数器与比较器设置。即TPM1CNTH与 TPM1MOD? 当两者相等时产生中断置位标志进入中断函数。
-
- #define LED1 PTDD_PTDD0
- #define LED2 PTDD_PTDD1
-
- #define LED1_dir PTDDD_PTDDD0
- #define LED2_dir PTDDD_PTDDD1
-
-
-
- /*************************************************************/
- /* 初始化总线时钟PEE模式 */
- /* 外部晶振频率为4MHz,总线频率16MHz */
- /*************************************************************/
- void INIT_MCG(void)
- {
- MCGC2=0x36;
- while(!MCGSC_OSCINIT);
- MCGC1=0xb8;
- while(MCGSC_IREFST);
- while(MCGSC_CLKST!=0b10);
- MCGC2_LP = 1;
- MCGC1 = 0x90;
- MCGC3 = 0x48;
- MCGC2_LP = 0;
- while(!MCGSC_PLLST);
- while(!MCGSC_LOCK);
- MCGC1 = 0x10;
- while(MCGSC_CLKST!=0b11);
- }
-
-
- /*************************************************************/
- /* 初始化LED */
- /*************************************************************/
- void INIT_LED(void)
- {
- LED1_dir=1; //I/O方向为输出
- LED1 = 0;
-
- LED2_dir=1; //I/O方向为输出
- LED2 = 1;
- }
-
-
- /*************************************************************/
- /* 初始化TPM1 */
- /*************************************************************/
- void INIT_TPM1(void)
- {
- TPM1SC = 0X4F;// TOF = 0; TOIE = 1; CPWMS = 0; CLKS[B:A] = 01( 总线速率时钟 ); PS = 1111;
- // 分频系数128,溢出允许中断,脉冲周期8us
- TPM1CNTH = 0;//任意时刻对TPM1CNTH或TPM1CNTL的写操作将计数寄存器的计数值复位(清零?
-
- TPM1MOD = 62500 - 1; //每62500个脉冲周期计数器溢出一次,溢出周期为62500 * 8us = 500 000us,即0.5s
- }
-
-
-
-
-
-
-
- void main(void) {
-
- DisableInterrupts;
- SOPT1 = 0;
- EnableInterrupts; /* enable interrupts */
- /* include your code here */
-
- INIT_MCG();
- INIT_LED();
- INIT_TPM1();
-
- while(1);
-
- }
-
-
-
- /*************************************************************/
- /* TPM1溢出中断函数 */
- /*************************************************************/
- void interrupt 11 TPM1_OVERFLOW(void)
- {
-
- //TPM1SC_TOF == 1,引发中断
-
- TPM1SC_TOF = 0;//清除溢出标志位
- LED1 = ~LED1;//改变LED1的亮灭状态
-
- }
|