[新手园地] 傻瓜菜鸟第2帖——TIMER

[复制链接]
 楼主| weshiluwei6 发表于 2011-4-14 09:45 | 显示全部楼层 |阅读模式
timer, rc, IO, gp, TE
[i=s] 本帖最后由 weshiluwei6 于 2011-4-14 09:57 编辑 [/i]

抽空写了个小程序   本人是大菜鸟 刚接触不久;   小程序实现了:LED1灯 一秒闪烁一次 利用定时器[code]/*---------------------------------------------------------------------------------------------------------*/
/* */
/* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved. */
/* */
/*---------------------------------------------------------------------------------------------------------*/
#include <stdio.h>
#include "NUC1xx.h"
#include "Driver\DrvGPIO.h"
#include "Driver\DrvSYS.h"
#include "Driver\DrvTIMER.h"

void Timer0_Callback (void)
{
if(DrvGPIO_GetBit(E_GPA,3))
{
DrvGPIO_ClrBit(E_GPA,3);
}
else
{
DrvGPIO_SetBit(E_GPA,3);
}
}

void Init_Timer0( void )
{
DrvTIMER_Init(); //初始化定时器
/*User must call this before any timer operation after system boots up*/

DrvSYS_SelectIPClockSource(E_SYS_TMR0_CLKSRC,0); //设定IP 时钟源
/* Set TIMER0 clock source are from 12MHz */
/* Parameters: */
/* eIpClkSrc-[in] E_SYS_WDT_CLKSRC / E_SYS_ADC_CLKSRC / E_SYS_TMR0_CLKSRC */
/* E_SYS_TMR1_CLKSRC / E_SYS_TMR2_CLKSRC / E_SYS_TMR3_CLKSRC */
/* E_SYS_UART_CLKSRC / E_SYS_CAN_CLKSRC / E_SYS_PWM01_CLKSRC*/
/* E_SYS_PWM23_CLKSRC / E_SYS_PWM45_CLKSRC/ E_SYS_PWM67_CLKSRC*/
/* E_SYS_FRQDIV_CLKSRC/ E_SYS_I2S_CLKSRC */

DrvTIMER_Open(E_TMR0,1,E_PERIODIC_MODE);
/* 用来设定定时器tick周期并且启动定时器 */

DrvTIMER_SetTimerEvent(E_TMR0,1,(TIMER_CALLBACK) Timer0_Callback,0);
/* 隔1个tick执行事件,parameter3-事件处理函数指针,4-传递参数*/

DrvTIMER_EnableInt(E_TMR0); //enable the specified timer interrupt

DrvTIMER_Start(E_TMR0); //Start to count the specified timer channel

}


/*************************************************************************************
** Function name: delay_loop
** Descriptions: 延时子程序
** input parameters: 无
** output parameters: 无
** Returned value: 无
*************************************************************************************/
void delay_loop(void)
{
uint32_t i,j;
for(i=800;i>0;i--)
for(j=500;j>0;j--);

}

/*************************************************************************************
** Function name: main
** Descriptions: LED2跟随LED1的亮灭而灭亮测试程序
** 现 象:下载代码,运行程序,则LED1亮LED2灭 LED1灭LED2亮循环反复
** input parameters: 无
** output parameters: 无
** Returned value: 无
*************************************************************************************/
int main (void)
{
/* SYSCLK =>12Mhz*/
UNLOCKREG();
SYSCLK->PWRCON.XTL12M_EN = 1;
LOCKREG();
Init_Timer0();

DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT );
DrvGPIO_ClrBit( E_GPA, 2 );
DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT );
while(1);
}
[/code]

本帖子中包含更多资源

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

×
Swallow_0322 发表于 2011-4-14 14:37 | 显示全部楼层
本帖最后由 Swallow_0322 于 2011-4-14 14:39 编辑

顶! O(∩_∩)O~ 你的代码格式?
本帖最后由 weshiluwei6 于 2011-4-14 09:57 编辑

抽空写了个小程序   本人是大菜鸟 刚接触不久;   小程序实现了:LED1灯 一秒闪烁一次 利用定时器
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /* */
  3. /* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved. */
  4. /* */
  5. /*---------------------------------------------------------------------------------------------------------*/
  6. #include <stdio.h>
  7. #include "NUC1xx.h"
  8. #include "Driver\DrvGPIO.h"
  9. #include "Driver\DrvSYS.h"
  10. #include "Driver\DrvTIMER.h"

  11. void Timer0_Callback (void)
  12. {
  13. if(DrvGPIO_GetBit(E_GPA,3))
  14. {
  15. DrvGPIO_ClrBit(E_GPA,3);
  16. }
  17. else
  18. {
  19. DrvGPIO_SetBit(E_GPA,3);
  20. }
  21. }

  22. void Init_Timer0( void )
  23. {
  24. DrvTIMER_Init(); //初始化定时器
  25. /*User must call this before any timer operation after system boots up*/

  26. DrvSYS_SelectIPClockSource(E_SYS_TMR0_CLKSRC,0); //设定IP 时钟源
  27. /* Set TIMER0 clock source are from 12MHz */
  28. /* Parameters: */
  29. /* eIpClkSrc-[in] E_SYS_WDT_CLKSRC / E_SYS_ADC_CLKSRC / E_SYS_TMR0_CLKSRC */
  30. /* E_SYS_TMR1_CLKSRC / E_SYS_TMR2_CLKSRC / E_SYS_TMR3_CLKSRC */
  31. /* E_SYS_UART_CLKSRC / E_SYS_CAN_CLKSRC / E_SYS_PWM01_CLKSRC*/
  32. /* E_SYS_PWM23_CLKSRC / E_SYS_PWM45_CLKSRC/ E_SYS_PWM67_CLKSRC*/
  33. /* E_SYS_FRQDIV_CLKSRC/ E_SYS_I2S_CLKSRC */

  34. DrvTIMER_Open(E_TMR0,1,E_PERIODIC_MODE);
  35. /* 用来设定定时器tick周期并且启动定时器 */

  36. DrvTIMER_SetTimerEvent(E_TMR0,1,(TIMER_CALLBACK) Timer0_Callback,0);
  37. /* 隔1个tick执行事件,parameter3-事件处理函数指针,4-传递参数*/

  38. DrvTIMER_EnableInt(E_TMR0); //enable the specified timer interrupt

  39. DrvTIMER_Start(E_TMR0); //Start to count the specified timer channel

  40. }


  41. /*************************************************************************************
  42. ** Function name: delay_loop
  43. ** Descriptions: 延时子程序
  44. ** input parameters: 无
  45. ** output parameters: 无
  46. ** Returned value: 无
  47. *************************************************************************************/
  48. void delay_loop(void)
  49. {
  50. uint32_t i,j;
  51. for(i=800;i>0;i--)
  52. for(j=500;j>0;j--);

  53. }

  54. /*************************************************************************************
  55. ** Function name: main
  56. ** Descriptions: LED2跟随LED1的亮灭而灭亮测试程序
  57. ** 现 象:下载代码,运行程序,则LED1亮LED2灭 LED1灭LED2亮循环反复
  58. ** input parameters: 无
  59. ** output parameters: 无
  60. ** Returned value: 无
  61. *************************************************************************************/
  62. int main (void)
  63. {
  64. /* SYSCLK =>12Mhz*/
  65. UNLOCKREG();
  66. SYSCLK->PWRCON.XTL12M_EN = 1;
  67. LOCKREG();
  68. Init_Timer0();

  69. DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT );
  70. DrvGPIO_ClrBit( E_GPA, 2 );
  71. DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT );
  72. while(1);
  73. }
Swallow_0322 发表于 2011-4-14 14:41 | 显示全部楼层
咦!我就是完全复制你的内容啊?不知道咋搞的!
hotpower 发表于 2011-4-14 16:45 | 显示全部楼层
不错,灯能闪烁了就是一大进步
 楼主| weshiluwei6 发表于 2011-4-14 18:09 | 显示全部楼层
3# Swallow_0322

为什么我们显示的不一样 SW哥 你怎么弄的呢
 楼主| weshiluwei6 发表于 2011-4-14 18:09 | 显示全部楼层
4# hotpower

恩恩 谢谢大叔 我要搞串口哈 ;P
Swallow_0322 发表于 2011-4-15 07:47 | 显示全部楼层
5# weshiluwei6

我就是完全复制你的内容!难道这就是传说中的RP问题,O(∩_∩)O哈哈~

你再试试,应该可以的!这比调试程序简单多了,实践一下就OK!
 楼主| weshiluwei6 发表于 2011-4-15 19:35 | 显示全部楼层
  1. [code]
[/code]
lixupengarm 发表于 2011-5-23 17:52 | 显示全部楼层
:victory:mark!!
lwslws201 发表于 2011-8-11 01:18 | 显示全部楼层
学习了。
strang 发表于 2011-8-11 11:01 | 显示全部楼层
Studing !
good good study
day day up
fskjhm 发表于 2011-8-13 07:38 | 显示全部楼层
练习代码:)
  1. int main (void)

  2. {

  3. /* SYSCLK =>12Mhz*/

  4. UNLOCKREG();

  5. SYSCLK->WRCON.XTL12M_EN = 1;

  6. LOCKREG();

  7. Init_Timer0();



  8. DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT );

  9. DrvGPIO_ClrBit( E_GPA, 2 );

  10. DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT );

  11. while(1);

  12. }
tao560532 发表于 2011-8-13 08:44 | 显示全部楼层
犀利
Mr_lizhiyong 发表于 2013-7-14 20:13 | 显示全部楼层
不错,不错!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

1126

帖子

1

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

7

主题

1126

帖子

1

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