微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > GNU ARM汇编--(十)s3c2440的RTC

GNU ARM汇编--(十)s3c2440的RTC

时间:11-26 来源:互联网 点击:

用BCD码表示的秒 分 时 日期 月份 年

给出报警中断的rtc汇编和c代码如下,在报警中断时是调用PWM的蜂鸣器来做闹钟的:

start.S:

[cpp]view plaincopy

  1. /*
  2. watchdogtimerwithdisablereset
  3. copyleft@dndxhej@gmail.com
  4. */
  5. .equNOINT,0xc0
  6. .equGPBCON,0x56000010@led
  7. .equGPBDAT,0x56000014@led
  8. .equGPBUP,0x56000018@led
  9. .equGPFCON,0x56000050@interruptconfig
  10. .equEINTMASK,0x560000a4
  11. .equEXTINT0,0x56000088
  12. .equEXTINT1,0x5600008c
  13. .equEXTINT2,0x56000090
  14. .equINTMSK,0x4A000008
  15. .equEINTPEND,0x560000a8
  16. .equSUBSRCPND,0x4a000018
  17. .equINTSUBMSK,0x4a00001c
  18. .equSRCPND,0X4A000000
  19. .equINTPND,0X4A000010
  20. .equGPHCON,0x56000070
  21. .equGPHDAT,0x56000074
  22. .equGPB5_out,(1<(5*2))
  23. .equGPB6_out,(1<(6*2))
  24. .equGPB7_out,(1<(7*2))
  25. .equGPB8_out,(1<(8*2))
  26. .equGPBVALUE,(GPB5_out|GPB6_out|GPB7_out|GPB8_out)
  27. .equLOCKTIME,0x4c000000
  28. .equMPLLCON,0x4c000004
  29. .equUPLLCON,0x4c000008
  30. .equM_Mdiv,92
  31. .equM_Pdiv,1
  32. .equM_Sdiv,1
  33. .equU_Mdiv,56
  34. .equU_Pdiv,2
  35. .equU_Sdiv,2
  36. .equCLKdivN,0x4c000014
  37. .equdivN_UPLL,0
  38. .equHdivN,1
  39. .equPdivN,1@FCLK:HCLK:PCLK=1:2:4
  40. .equWTCON,0x53000000
  41. .equPre_scaler,249
  42. .equwd_timer,1
  43. .equclock_select,00@316
  44. .equint_gen,1@开中断
  45. .equreset_enable,0@关掉重启信号
  46. .equWTDAT,0x53000004
  47. .equCount_reload,50000@定时器定为2SPCLK=100MPCLK/(Pre_scaler+1)/clock_select=100M/(249+1)/16=25k50000/25k=2s
  48. .equWTCNT,0x53000008
  49. .equCount,50000
  50. .equTCFG0,0x51000000
  51. .equPrescaler1,0x00@[15:8]Timer234
  52. .equPrescaler0,249@[7:0]Timer01
  53. .equTCFG1,0x51000004
  54. .equDMA_MODE,0x0@[23:20]nodmachannal
  55. .equMUX0,0x2@[3:0]1/8
  56. @定时器输入时钟周期=PCLK/(prescaler+1)/(dividervalue)
  57. @clk=100M/(249+1)/8=25k
  58. .equTCON,0x51000008
  59. .equDZ_eable,0@[4]关闭死区的操作
  60. .equauto_reload,1@[3]auto_reload
  61. .equinverter,1@[2]打开电平反转
  62. .equman_update,1@[1]手动更新
  63. .equclear_man_update,0
  64. .equstart,1@[0]开始
  65. .equstop,0@[0]停止
  66. .equTCNTB0,0x5100000c
  67. .equTCMPB0,0x51000010
  68. .equTCNTO0,0x51000014
  69. .equULCON0,0x50000000
  70. .equIR_MODE,0x0@[6]正常模式
  71. .equParity_Mode,0x0@[5:3]无校验位
  72. .equNum_of_stop_bit,0x0@[2]一个停止位
  73. .equWord_length,0b11@[1:0]8个数据位
  74. .equUCON0,0x50000004
  75. .equFCLK_Div,0@[15:12]时钟源选择用PCLK,所以这里用默认值
  76. .equClk_select,0b00@[11:10]时钟源选择使用PCLK
  77. .equTx_Int_Type,1@[9]中断请求类型为Level
  78. .equRx_Int_Type,0@1@[8]中断请求类型为Level
  79. .equRx_Timeout,0@[7]
  80. .equRx_Error_Stat_Int,1@[6]
  81. .equLoopback_Mode,0@[5]正常模式
  82. .equBreak_Sig,0@[4]不发送终止信号
  83. .equTx_Mode,0b01@[3:2]中断请求或轮循模式
  84. .equRx_Mode,0b01@[1:0]中断请求或轮循模式
  85. .equUFCON0,0x50000008
  86. .equTx_FIFO_Trig_Level,0b00@[7:6]
  87. .equRx_FIFO_Trig_Level,0b00@[5:4]
  88. .equTx_FIFO_Reset,0b0@[2]
  89. .equRx_FIFO_Reset,0b0@[1]
  90. .equFIFO_Enable,0b0@[0]非FIFO模式
  91. .equUMCON0,0x5000000C@这个寄存器可以不管的
  92. .equUTRSTAT0,0x50000010
  93. .equUERSTAT0,0x50000014
  94. .equUFSTAT0,0x50000018
  95. .equUMSTAT0,0x5000001C
  96. .equUTXH0,0x50000020@(L小端)
  97. .equURXH0,0x50000024@(L小端)
  98. .equUBRdiv0,0x50000028
  99. .equUBRdiv,0x35@PCLK=400M/4=100MUBRdiv=(int)(100M/115200/16)-1=53=0x35
  100. .equBCDMIN,0x57000074
  101. .equBCDSEC,0x57000070
  102. //.globalBuzzer_Freq_Set
  103. .global_start
  104. _start:breset
  105. ldrpc,_undefined_instruction
  106. ldrpc,_software_interrupt
  107. ldrpc,_prefetch_abort
  108. ldrpc,_data_abort
  109. ldrpc,_not_used
  110. @birq
  111. ldrpc,_irq
  112. ldrpc,_fiq
  113. _undefined_instruction:.wordundefined_instruction
  114. _software_interrupt:.wordsoftware_interrupt
  115. _prefetch_abort:.wordprefetch_abort
  116. _data_abort:.worddata_abort
  117. _not_used:.wordnot_used
  118. _irq:.wordirq
  119. _fiq:.wordfiq
  120. .balignl16,0xdeadbeef
  121. reset:
  122. ldrr3,=WTCON
  123. movr4,#0x0
  124. strr4,[r3]@disablewatchdog
  125. ldrr0,=GPBCON
  126. ldrr1,=0x15400@这个时候暂不配置GPB0为TOUT0
  127. strr1,[r0]
  128. ldrr2,=GPBDAT
  129. ldrr1,=0x160
  130. strr1,[r2]
  131. blclock_setup
  132. bluart_init
  133. bldelay
  134. msrcpsr_c,#0xd2@进入中断模式
  135. ldrsp,=3072@中断模式的栈指针定义
  136. msrcpsr_c,#0xd3@进入系统模式
  137. ldrsp,=4096@设置系统模式的栈指针
  138. @--------------------------------------------
  139. ldrr0,=GPBUP
  140. ldrr1,=0x03f0
  141. strr1,[r0]
  142. ldrr0,=GPFCON
  143. ldrr1,=0x2ea@0x2
  144. strr1,[r0]
  145. ldrr0,=EXTINT0
  146. @ldrr1,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top