[demo程序] NV32F101 PIT定时中断程序示例

[复制链接]
 楼主| Bruing 发表于 2018-8-28 18:32 | 显示全部楼层 |阅读模式
  1. /**********************************************************************
  2. *
  3. * 实验名称:PIT定时中断
  4. * 实验平台:NV32开发板
  5. * 板载芯片:NV32F101FL64E
  6. * 实验说明:本例程设置定时器1链接至定时器0产生每秒1次的中断. 定时器0触发 1,000,000 个周期,
  7. *           定时器1触发40次,总周期为10,000,000个时钟周期,以总线时钟在本例程中为40MHZ,所以说,
  8. *           时钟周期为25ns ,产生一秒的中断需要40,000,000个时钟周期,设定回调任务为LED灯闪烁.  
  9. *
  10. ************************************************************************/

  11. #include "common.h"
  12. #include "uart.h"
  13. #include "pit.h"
  14. #include "sysinit.h"


  15. int main (void);
  16. void PIT_Task(void);
  17. /*****************************************************************************
  18. *****************************************************************************/
  19. int main (void)
  20. {
  21.     uint8_t         u8Ch;
  22.     uint32_t        u32LoadValue0, u32LoadValue1;     
  23.     PIT_ConfigType  sPITConfig0, sPITConfig1;   
  24.     PIT_ConfigType  *pPIT_Config1   =&sPITConfig1;
  25.     PIT_ConfigType  *pPIT_Config0   =&sPITConfig0;

  26.     /* 系统初始化 */
  27.     sysinit();
  28.    
  29.     printf("\nRunning the PIT_demo project.\r\n");
  30.    
  31.     LED0_Init();

  32.     /* PIT时钟源为总线时钟 */
  33.     /* 通道0装载值为 = (1000000-1),通道1装载值为 = (40-1) */
  34.     u32LoadValue0   = 0xF423F;                  /* 通道0装载值 */
  35.     u32LoadValue1   = 0x13;                     /* 通道1装载值 */      
  36.    
  37.     /* 配置通道1为链接模式,开启中断并且使能 */
  38.     pPIT_Config1->u32LoadValue      = u32LoadValue1;
  39.     pPIT_Config1->bFreeze           = FALSE;    //定时器在调试模式下继续运行
  40.     pPIT_Config1->bModuleDis        = FALSE;    //使能定时器模块
  41.     pPIT_Config1->bInterruptEn      = TRUE;     //开启对应通道的IRQ中断
  42.     pPIT_Config1->bChainMode        = TRUE;     //定时器链接到前一定时器
  43.     pPIT_Config1->bETMerEn          = TRUE;     //定时器使能
  44.    
  45.     /* 配置通道0, 仅仅使能 */   
  46.     pPIT_Config0->u32LoadValue      = u32LoadValue0;
  47.     pPIT_Config0->bFreeze           = FALSE;    //定时器在调试模式下继续运行
  48.     pPIT_Config0->bModuleDis        = FALSE;    //使能定时器模块      
  49.     pPIT_Config0->bInterruptEn      = FALSE;   
  50.     pPIT_Config0->bChainMode        = FALSE;
  51.     pPIT_Config0->bETMerEn          = TRUE;     //定时器使能

  52.     PIT_Init(PIT_CHANNEL0, pPIT_Config0);  //初始化PIT模块通道0               
  53.     PIT_Init(PIT_CHANNEL1, pPIT_Config1);  //初始化PIT模块通道1
  54.       
  55.     PIT_SetCallback(PIT_CHANNEL1, PIT_Task);  //设置通道1中断回调函数   
  56.    
  57.     /* 回显从终端所发的字符 */
  58.         while(1)  
  59.    
  60.         {
  61.         u8Ch = UART_GetChar(TERM_PORT);
  62.         UART_PutChar(TERM_PORT, u8Ch);
  63.         }

  64. }

  65. /*****************************************************************************//*!
  66. *
  67. * @PIT中断任务函数
  68. *        
  69. * @无输入
  70. *
  71. * @无返回
  72. *
  73. *****************************************************************************/

  74. void PIT_Task(void)
  75. {
  76.     LED0_Toggle();          /*!< 闪烁LED1 */
  77. }
  78. /********************************************************************/


lxs0026 发表于 2018-9-6 23:57 | 显示全部楼层
诶嘿~ 可以复制粘贴的。哈哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

308

帖子

1

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

71

主题

308

帖子

1

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