[Atmel] 跑一下SAM4N例程(十九):RTT

[复制链接]
857|0
 楼主| ddllxxrr 发表于 2015-4-1 22:03 | 显示全部楼层 |阅读模式
本帖最后由 ddllxxrr 于 2015-4-7 20:58 编辑

这个RTT比昨天的RTC简单点。其原理也是先设RTC中断,然后,在中断里更新显示。
用户可以设一个数字,当程序运行到这个数字时,就显示一行报警的字样


以下是调有的显示函数
  1. static void refresh_display(void)
  2. {
  3.         printf("%c[2J\r", 27);
  4.         printf("Time: %u\n\r", (unsigned int)rtt_read_timer_value(RTT));

  5.         /* Display alarm */
  6.         if (g_uc_alarmed) {
  7.                 puts("!!! ALARM !!!\r");
  8.         }

  9.         /* Main menu */
  10.         if (g_uc_state == STATE_MAIN_MENU) {
  11.                 puts("Menu:\n\r"
  12.                                 " r - Reset timer\n\r"
  13.                                 " s - Set alarm\r");
  14.                 if (g_uc_alarmed) {
  15.                         puts(" c - Clear alarm notification\r");
  16.                 }
  17.                 puts("\n\rChoice? ");
  18.         } else {
  19.                 if (g_uc_state == STATE_SET_ALARM) {
  20.                         puts("Enter alarm time: ");
  21.                         if (g_ul_new_alarm != 0) {
  22.                                 printf("%u", (unsigned)g_ul_new_alarm);
  23.                         }
  24.                 }
  25.         }
  26. }
以下是中断函数

  1. void RTT_Handler(void)
  2. {
  3.         uint32_t ul_status;

  4.         /* Get RTT status */
  5.         ul_status = rtt_get_status(RTT);

  6.         /* Time has changed, refresh display */
  7.         if ((ul_status & RTT_SR_RTTINC) == RTT_SR_RTTINC) {
  8.                 refresh_display();
  9.         }

  10.         /* Alarm */
  11.         if ((ul_status & RTT_SR_ALMS) == RTT_SR_ALMS) {
  12.                 g_uc_alarmed = 1;
  13.                 refresh_display();
  14.         }
  15. }
而主函数就是检测按键的输入:

  1. /* User input loop */
  2.         while (1) {
  3.                 /* Wait for user input */
  4.                 scanf("%c", (char *)&c);

  5.                 /* Main menu mode */
  6.                 if (g_uc_state == STATE_MAIN_MENU) {
  7.                         /* Reset timer */
  8.                         if (c == 'r') {
  9.                                 configure_rtt();
  10.                                 refresh_display();
  11.                         } else if (c == 's') { /* Set alarm */
  12.                                 g_uc_state = STATE_SET_ALARM;
  13.                                 g_ul_new_alarm = 0;
  14.                                 refresh_display();
  15.                         } else { /* Clear alarm */
  16.                                 if ((c == 'c') && g_uc_alarmed) {
  17.                                         g_uc_alarmed = 0;
  18.                                         refresh_display();
  19.                                 }
  20.                         }
  21.                 } else if (g_uc_state == STATE_SET_ALARM) { /* Set alarm mode */
  22.                         /* Number */
  23.                         if ((c >= '0') && (c <= '9')) {
  24.                                 g_ul_new_alarm = g_ul_new_alarm * 10 + c - '0';
  25.                                 refresh_display();
  26.                         } else if (c == ASCII_BS) {
  27.                                 printf("%c", c);
  28.                                 g_ul_new_alarm /= 10;
  29.                                 refresh_display();
  30.                         } else if (c == ASCII_CR) {
  31.                                 /* Avoid newAlarm = 0 case */
  32.                                 if (g_ul_new_alarm != 0) {
  33.                                         rtt_write_alarm_time(RTT, g_ul_new_alarm);
  34.                                 }

  35.                                 g_uc_state = STATE_MAIN_MENU;
  36.                                 refresh_display();
  37.                         }
  38.                 }



以下是运行截图:



本帖子中包含更多资源

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

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

2404

主题

7001

帖子

68

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