[新手园地] ddllxxrr笔记十二 群灯乱舞

[复制链接]
2994|1
 楼主| ddllxxrr 发表于 2011-10-14 09:56 | 显示全部楼层 |阅读模式
TI, timer, TE, tc, rc
这次程序是上个笔记的延续
这个是TIME四个定时器一起启动,每个控制一个LED,看上去木有规率,其实是有规率地

  1. *---------------------------------------------------------------------------------------------------------*/
  2. #include <stdio.h>
  3. /*---------------------------------------------------------------------------------------------------------*/
  4. /*  Include hear file                                                                       */
  5. /*---------------------------------------------------------------------------------------------------------*/
  6. #include "NUC1xx.h"
  7. /*----------------------------------------------------------------------------
  8.   Define variable
  9.   ----------------------------------------------------------------------------*/
  10. static uint32_t TimerCOUN=0;
  11. static uint32_t TimerCOUN1=0;
  12. static uint32_t TimerCOUN2=0;
  13. static uint32_t TimerCOUN3=0;

  14. /*----------------------------------------------------------------------------
  15.   Function subroutine
  16.   ----------------------------------------------------------------------------*/
  17. void Delay(uint32_t delayCnt)
  18. {
  19.     while(delayCnt--)
  20.     {
  21.         __NOP();
  22.         __NOP();
  23.     }
  24. }
  25. uint32_t GetTDR(void)
  26. {
  27. return  TIMER0->TDR;
  28. }
  29. uint32_t GetTDR1(void)
  30. {
  31. return  TIMER1->TDR;
  32. }
  33. uint32_t GetTDR2(void)
  34. {
  35. return  TIMER2->TDR;
  36. }
  37. uint32_t GetTDR3(void)
  38. {
  39. return  TIMER3->TDR;
  40. }
  41. /*----------------------------------------------------------------------------
  42.   Interrupt subroutine
  43.   ----------------------------------------------------------------------------*/
  44. void TMR0_IRQHandler(void) // Timer0 interrupt subroutine
  45. {
  46.   TIMER0->TISR.TIF =1;
  47. TimerCOUN++;
  48.      
  49. }
  50. void TMR1_IRQHandler(void) // Timer1 interrupt subroutine
  51. {
  52.   TIMER1->TISR.TIF =1;
  53. TimerCOUN1++;
  54.      
  55. }
  56. void TMR2_IRQHandler(void) // Timer2 interrupt subroutine
  57. {
  58.   TIMER2->TISR.TIF =1;
  59. TimerCOUN2++;
  60.    
  61. }
  62. void TMR3_IRQHandler(void) // Timer3 interrupt subroutine
  63. {
  64.   TIMER3->TISR.TIF =1;
  65. TimerCOUN3++;
  66.      
  67. }
  68. /*----------------------------------------------------------------------------
  69.   MAIN function
  70.   ----------------------------------------------------------------------------*/
  71. int32_t main (void)
  72. {
  73. //unsigned int TEMP;
  74. //uint32_t TEMP;
  75. GPIOA->PMD.PMD2=1; //分别设连接LED管脚为,IO模式
  76.     GPIOA->PMD.PMD3=1;
  77.     GPIOA->PMD.PMD4=1;
  78.     GPIOA->PMD.PMD5=1;
  79. NVIC_DisableIRQ(TMR0_IRQn); //Disable Timer0 interrupt
  80. outpw(&TIMER0->TCSR ,0 ); //Disable Timer0//清Timer0的中断标志                              
  81. /* Step 1. Enable and Select Timer clock source */         
  82. SYSCLK->CLKSEL1.TMR0_S = 4; //Select 22Mhz for Timer0 clock source
  83.     SYSCLK->APBCLK.TMR0_EN =1; //Enable Timer0 clock source
  84. /* Step 2. Select Operation mode */
  85. TIMER0->TCSR.MODE=1;  //定时器工作在周期模式.当中断使能时,
  86. //一旦定时器计数器的值(24位递增计数器)等于比较寄存器(TCMPR)的值,
  87. //就会触发定时器中断。
  88. /* Step 3. Select Time out period = (Period of timer clock input) * (8-bit Prescale + 1) * (24-bit TCMP)*/
  89. TIMER0->TCSR.PRESCALE=0; // Set Prescale [0~255]
  90. TIMER0->TCMPR= 2765;//TICR = 2765;  // Set TICR(TCMP) [0~16777215]
  91.         // (1/22118400)*(0+1)*(2765)= 125.01usec or 7999.42Hz
  92. /* Step 4. Enable interrupt */
  93. TIMER0->TCSR.IE = 1;
  94. TIMER0->TISR.TIF = 1;  //Write 1 to clear for safty  
  95. NVIC_EnableIRQ(TMR0_IRQn); //Enable Timer0 Interrupt
  96. /* Step 5. Enable Timer module */
  97. TIMER0->TCSR.CRST = 1;  //Reset up counter
  98. TIMER0->TCSR.CEN = 1;  //Enable Timer0
  99.    TIMER0->TCSR.TDR_EN=1;  // Enable TDR function
  100.     //以下是TIMER1的设置
  101.   /* Step 1. Enable and Select Timer clock source */         
  102. SYSCLK->CLKSEL1.TMR1_S = 4; //Select 22Mhz for Timer0 clock source
  103.     SYSCLK->APBCLK.TMR1_EN =1; //Enable Timer0 clock source
  104.   
  105.   /* Step 2. Select Operation mode */
  106. TIMER1->TCSR.MODE=1;  //定时器工作在周期模式.当中断使能时,
  107. //一旦定时器计数器的值(24位递增计数器)等于比较寄存器(TCMPR)的值,
  108. //就会触发定时器中断。
  109. /* Step 3. Select Time out period = (Period of timer clock input) * (8-bit Prescale + 1) * (24-bit TCMP)*/
  110. TIMER1->TCSR.PRESCALE=20; // Set Prescale [0~255]
  111. TIMER1->TCMPR= 2765;//TICR = 2765;  // Set TICR(TCMP) [0~16777215]
  112.         // (1/22118400)*(0+1)*(2765)= 125.01usec or 7999.42Hz
  113. /* Step 4. Enable interrupt */
  114. TIMER1->TCSR.IE = 1;
  115. TIMER1->TISR.TIF = 1;  //Write 1 to clear for safty  
  116. NVIC_EnableIRQ(TMR1_IRQn); //Enable Timer0 Interrupt
  117. /* Step 5. Enable Timer module */
  118. TIMER1->TCSR.CRST = 1;  //Reset up counter
  119. TIMER1->TCSR.CEN = 1;  //Enable Timer0
  120.    TIMER1->TCSR.TDR_EN=1;  // Enable TDR function
  121.      //以下设TIMER2的设置
  122.   /* Step 1. Enable and Select Timer clock source */         
  123. SYSCLK->CLKSEL1.TMR2_S = 4; //Select 22Mhz for Timer0 clock source
  124.     SYSCLK->APBCLK.TMR2_EN =1; //Enable Timer0 clock source
  125.    /* Step 2. Select Operation mode */
  126. TIMER2->TCSR.MODE=1;  //定时器工作在周期模式.当中断使能时,
  127. //一旦定时器计数器的值(24位递增计数器)等于比较寄存器(TCMPR)的值,
  128. //就会触发定时器中断。
  129. /* Step 3. Select Time out period = (Period of timer clock input) * (8-bit Prescale + 1) * (24-bit TCMP)*/
  130. TIMER2->TCSR.PRESCALE=10; // Set Prescale [0~255]
  131. TIMER2->TCMPR= 2765;//TICR = 2765;  // Set TICR(TCMP) [0~16777215]
  132.         // (1/22118400)*(0+1)*(2765)= 125.01usec or 7999.42Hz
  133. /* Step 4. Enable interrupt */
  134. TIMER2->TCSR.IE = 1;
  135. TIMER2->TISR.TIF = 1;  //Write 1 to clear for safty  
  136. NVIC_EnableIRQ(TMR2_IRQn); //Enable Timer0 Interrupt
  137. /* Step 5. Enable Timer module */
  138. TIMER2->TCSR.CRST = 1;  //Reset up counter
  139. TIMER2->TCSR.CEN = 1;  //Enable Timer0
  140.    TIMER2->TCSR.TDR_EN=1;  // Enable TDR function
  141.      //以下设TIMER3的设置
  142.   /* Step 1. Enable and Select Timer clock source */         
  143. SYSCLK->CLKSEL1.TMR3_S = 4; //Select 22Mhz for Timer0 clock source
  144.     SYSCLK->APBCLK.TMR3_EN =1; //Enable Timer0 clock source
  145.    /* Step 2. Select Operation mode */
  146. TIMER3->TCSR.MODE=1;  //定时器工作在周期模式.当中断使能时,
  147. //一旦定时器计数器的值(24位递增计数器)等于比较寄存器(TCMPR)的值,
  148. //就会触发定时器中断。
  149. /* Step 3. Select Time out period = (Period of timer clock input) * (8-bit Prescale + 1) * (24-bit TCMP)*/
  150. TIMER3->TCSR.PRESCALE=2; // Set Prescale [0~255]
  151. TIMER3->TCMPR= 2765;//TICR = 2765;  // Set TICR(TCMP) [0~16777215]
  152.         // (1/22118400)*(0+1)*(2765)= 125.01usec or 7999.42Hz
  153. /* Step 4. Enable interrupt */
  154. TIMER3->TCSR.IE = 1;
  155. TIMER3->TISR.TIF = 1;  //Write 1 to clear for safty  
  156. NVIC_EnableIRQ(TMR3_IRQn); //Enable Timer0 Interrupt
  157. /* Step 5. Enable Timer module */
  158. TIMER3->TCSR.CRST = 1;  //Reset up counter
  159. TIMER3->TCSR.CEN = 1;  //Enable Timer0
  160.    TIMER3->TCSR.TDR_EN=1;  // Enable TDR function

  161. while(1)
  162. {
  163.   Delay(10);
  164.   //TEMP = GetTDR();  //Get value of up counter
  165.   if (TimerCOUN>1000)
  166.   {
  167.   GPIOA->DOUT ^= BIT2;
  168.   TimerCOUN=0;
  169.   }
  170.   //TEMP1 = GetTDR1();  //Get value of up counter
  171.   if (TimerCOUN1>1000)
  172.   {
  173.   GPIOA->DOUT ^= BIT3;
  174.   TimerCOUN1=0;
  175.   }
  176.   //TEMP2 = GetTDR2();  //Get value of up counter
  177.   if (TimerCOUN2>1000)
  178.   {
  179.   GPIOA->DOUT ^= BIT4;
  180.   TimerCOUN2=0;
  181.   }
  182.   //TEMP3 = GetTDR3();  //Get value of up counter
  183.   if (TimerCOUN3>1000)
  184.   {
  185.   GPIOA->DOUT ^= BIT5;
  186.   TimerCOUN3=0;
  187.   }
  188. }

  189. }

  190. 程序打包:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
hotpower 发表于 2011-10-14 10:51 | 显示全部楼层
奢侈呀!好像look的四个任务。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2404

主题

7002

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部