久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6429|回復: 0
打印 上一主題 下一主題
收起左側

RTC初始化鬧鐘核心代碼注解(原子綜合例程)

[復制鏈接]
跳轉到指定樓層
樓主
ID:72008 發表于 2015-1-12 15:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    花了一天的時間把原子的RTC例程移植到了野火的板子(固件庫版本);順便自己想做一個鬧鐘程序,憑借自己的功底肯定是不可能的任務!只好學習原子的鬧鐘例程了。根據自己的理解做了比較詳細的注釋。手機上看似一個簡單的鬧鐘設置功能,要自己寫出實現鬧鐘功能的c語言程序卻不是一件簡單的事。

綜合例程就有鬧鐘設置部分,核心代碼:
//重新初始化鬧鐘             
//alarmx:鬧鐘結構體
void calendar_alarm_init(_alarm_obj *alarmx)  
{          
          u32 curtime=0; //rtc寄存器的當前時間,即秒數
   u32 temptime=0;
   u32 destime=0XFFFFFFFF;//目標鬧鈴時間(s)設定到最大 ,即我要設定的鬧鐘目標日期
        if(alarmx->weekmask)//必須要有鬧鐘存在,周日到周六任意一天,當alarmx->weekmask是0時,說明沒有鬧鐘要設置     {                
     curtime=RTC->CNTH;//得到計數器中的值(秒鐘數)
     curtime<<=16;
     curtime+=RTC->CNTL;    //獲取RTC當前的秒數值,注意c語言取值技巧!
    //取一個與當前時間最接近的值作為鬧鐘寄存器的內容
     temptime=curtime/86400;        //得到當前運行天數(此處沒有用到天數,僅作說明用) ,一天等于86400秒
     temptime=temptime*86400;
     temptime+=(u32)alarmx->hour*3600+(u32)alarmx->min*60;//得到秒鐘數
     if(temptime<=curtime)temptime+=86400;//執行時間已過,推遲到明天
     destime=temptime;//更改鬧鐘寄存器
        }
  RCC->APB1ENR|=1<<28;//使能電源時鐘
  RCC->APB1ENR|=1<<27;//使能備份時鐘
  PWR->CR|=1<<8;    //取消備份區寫保護
//上面三步是必須的!
  RTC->CRL|=1<<4;   //允許配置  
  RTC->ALRL=destime&0xffff;  //把destime的低16位存入鬧鐘數據寄存器RTC->ALRL
  RTC->ALRH=destime>>16; //把destime的高16位存入鬧鐘數據寄存器RTC->ALRH
  RTC->CRL&=~(1<<4);//配置更新
  while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成   
}
程序說明:如果alarmx->weekmask是0時,說明沒有鬧鐘要設置;這時“if(alarmx->weekmask)”控制的語句就不會執行,所以此時我要設定的鬧鐘目標日期值即秒數是最大值0XFFFFFFFF,這是一個138年之內不可能的鬧鐘。假設當alarmx->weekmask是“真”,則執行“if(alarmx->weekmask)”控制的語句,這時本函數的核心!最終就是要為鬧鐘數據寄存器取得準確鬧鐘時間。

其中_alarm_obj的結構體定義如下:
//鬧鐘結構體             
__packed typedef struct   
{                        
u8  weekmask;         //鬧鐘響鈴掩碼   
u8  ringsta;         //鬧鈴狀態及鈴聲標志.
//[7]:0,無鬧鈴;1,鬧鈴中;
//[6:3]:保留
//[2:0]:鬧鐘鈴聲類型
u8  hour;                    //鬧鈴小時
u8  min;         //鬧鈴分鐘       

u8 saveflag;         //保存標志,0X0A,保存過了;其他,還從未保存            
}_alarm_obj;


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩av视屏| 中文字幕精品一区二区三区精品 | 亚洲一区免费视频 | 中文字幕一区二区三区四区五区 | 欧美一区二区大片 | 欧美一区二区三区的 | 综合九九| 欧美精品中文字幕久久二区 | 色综合99 | 亚洲免费视频在线观看 | 97av视频在线观看 | 欧美涩 | 久久精品视频一区二区三区 | 一区二区三区四区免费在线观看 | 黄色三级免费 | 91视频免费观看 | 毛片的网址| 国产精品一区二区在线播放 | 久久精品国产一区二区三区 | 最近日韩中文字幕 | 一区二区成人 | 欧美精品一区二区三区在线播放 | 视频一区二区在线观看 | 国产成人精品一区二区三区 | 日本亚洲精品 | 日本亚洲一区二区 | 精品一区二区在线观看 | 人人干在线视频 | 欧美激情国产日韩精品一区18 | 国产伦精品一区二区三毛 | 国产精品久久久久一区二区三区 | 婷婷去俺也去 | 亚洲精品电影 | 精品在线一区 | 中文字幕av一区 | 草久网 | 中文字幕在线免费观看 | 久久com | 国产乱码精品一区二区三区中文 | av毛片 | 91视在线国内在线播放酒店 |