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

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

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

  1. =0x8f888@0x0@0x8f888@~(7|(7<4)|(7<8)|(7<16))//低电平触发中断
  2. ldrr1,=0xafaaa@0x0@0x8f888//下降沿触发中断
  3. strr1,[r0]
  4. ldrr0,=EINTPEND
  5. ldrr1,=0xf0@0b10000
  6. strr1,[r0]
  7. ldrr0,=EINTMASK
  8. ldrr1,=0x00@0b00000
  9. strr1,[r0]
  10. ldrr0,=SRCPND
  11. ldrr1,=0x3ff|(1<30)@0x1@0b11111
  12. strr1,[r0]
  13. ldrr0,=SUBSRCPND
  14. ldrr1,=0x1<13
  15. strr1,[r0]
  16. ldrr0,=INTPND
  17. ldrr1,=0x3ff|(1<30)@0x1@0b11111
  18. strr1,[r0]
  19. ldrr0,=INTSUBMSK
  20. ldrr1,=0x0<13
  21. strr1,[r0]
  22. ldrr0,=INTMSK
  23. ldrr1,=0x1ffff000@0b00000
  24. strr1,[r0]
  25. MRSr1,cpsr
  26. BICr1,r1,#0x80
  27. MSRcpsr_c,r1
  28. blmain
  29. irq:
  30. sublr,lr,#4
  31. stmfdsp!,{r0-r12,lr}
  32. blirq_isr
  33. ldmfdsp!,{r0-r12,pc}^
  34. irq_isr:
  35. ldrr2,=GPBDAT
  36. ldrr1,=0x0e0
  37. strr1,[r2]
  38. ldrr3,=0xffffff
  39. delay2:
  40. subr3,r3,#1
  41. cmpr3,#0x0
  42. bnedelay2
  43. //这上面的延时必须要,否则蜂鸣器的声音有问题
  44. ldrr0,=EINTPEND
  45. ldrr1,=0xf0
  46. strr1,[r0]
  47. ldrr0,=SRCPND
  48. ldrr1,=0x3ff|(1<30)@0b11111
  49. strr1,[r0]
  50. ldrr0,=SUBSRCPND
  51. ldrr1,=0x1<13
  52. strr1,[r0]
  53. ldrr0,=INTPND
  54. ldrr1,=0x3ff|(1<30)@0b11111
  55. strr1,[r0]
  56. ldrr2,=GPBCON
  57. ldrr1,[r2]
  58. ldrr1,[r1]
  59. //ldrr1,=0x15400
  60. bicr1,r1,#0x3
  61. orrr1,r1,#0x2
  62. strr1,[r2]
  63. ldrr2,=GPBDAT
  64. ldrr1,=0x1a0
  65. strr1,[r2]
  66. ldrr1,=TCFG0
  67. ldrr2,=(Prescaler0<0)
  68. strr2,[r1]
  69. ldrr1,=TCFG1
  70. ldrr2,=(DMA_MODE<20)|(MUX0<0)
  71. strr2,[r1]
  72. //ldrr3,[r0]
  73. //strr3,[r2]
  74. //movr2,r0
  75. ldrr1,=TCNTB0
  76. ldrr2,=10
  77. strr2,[r1]//r0就是c调用汇编的传递参数
  78. //movr0,r0,LSR#2
  79. ldrr1,=TCMPB0
  80. ldrr2,=2
  81. strr2,[r1]
  82. ldrr1,=TCON
  83. ldrr2,=(DZ_eable<4)|(auto_reload<3)|(inverter<2)|(man_update<1)|(start<0)
  84. strr2,[r1]
  85. ldrr1,=TCON
  86. ldrr2,=(DZ_eable<4)|(auto_reload<3)|(inverter<2)|(clear_man_update<1)|(start<0)
  87. strr2,[r1]
  88. ldrr2,=GPBDAT
  89. ldrr1,=0x1a0
  90. strr1,[r2]
  91. movpc,lr
  92. delay:
  93. ldrr3,=0xffffff
  94. delay1:
  95. subr3,r3,#1
  96. cmpr3,#0x0
  97. bnedelay1
  98. movpc,lr
  99. clock_setup:
  100. ldrr0,=LOCKTIME
  101. ldrr1,=0xffffffff
  102. strr1,[r0]
  103. ldrr0,=CLKdivN
  104. ldrr1,=(divN_UPLL<3)|(HdivN<1)|(PdivN<0)
  105. strr1,[r0]
  106. ldrr0,=UPLLCON
  107. ldrr1,=(U_Mdiv<12)|(U_Pdiv<4)|(U_Sdiv<0)@Fin=12MUPLL=48M
  108. strr1,[r0]
  109. nop
  110. nop
  111. nop
  112. nop
  113. nop
  114. nop
  115. nop
  116. ldrr0,=MPLLCON
  117. ldrr1,=(M_Mdiv<12)|(M_Pdiv<4)|(M_Sdiv<0)@Fin=12MFCLK=400M
  118. strr1,[r0]
  119. movpc,lr
  120. uart_init:
  121. ldrr0,=GPHCON
  122. ldrr1,=0x2aaaa@配置GPIO复用规则为串口
  123. strr1,[r0]
  124. ldrr0,=ULCON0
  125. ldrr1,=(IR_MODE<6)|(Parity_Mode<3)|(Num_of_stop_bit<2)|(Word_length<0)@
  126. strr1,[r0]
  127. ldrr0,=UCON0
  128. ldrr1,=(FCLK_Div<12)|(Clk_select<10)|(Tx_Int_Type<9)|(Rx_Int_Type<8)|(Rx_Timeout<7)|(Rx_Error_Stat_Int<6)|(Loopback_Mode<5)|(Break_Sig<4)|(Tx_Mode<2)|(Rx_Mode<0)
  129. strr1,[r0]
  130. ldrr0,=UFCON0
  131. ldrr1,=(Tx_FIFO_Trig_Level<6)|(Rx_FIFO_Trig_Level<4)|(Tx_FIFO_Reset<2)|(Rx_FIFO_Reset<1)|(FIFO_Enable<0)@
  132. strr1,[r0]
  133. ldrr0,=UBRdiv0
  134. ldrr1,=(UBRdiv<0)
  135. strr1,[r0]
  136. movpc,lr
  137. /*
  138. Buzzer_Freq_Set:
  139. //ldrr0,=GPBCON
  140. //ldrr1,=0x15400@这个时候暂不配置GPB0为TOUT0,这时候只是配置GPB0为TOUT0
  141. //strr1,[r0]
  142. ldrr2,=GPBCON
  143. ldrr1,[r2]
  144. ldrr1,[r1]
  145. //ldrr1,=0x15400
  146. bicr1,r1,#0x3
  147. orrr1,r1,#0x2
  148. strr1,[r2]
  149. ldrr2,=GPBDAT
  150. ldrr1,=0x1a0
  151. strr1,[r2]
  152. ldrr1,=TCFG0
  153. ldrr2,=(Prescaler0<0)
  154. strr2,[r1]
  155. ldrr1,=TCFG1
  156. ldrr2,=(DMA_MODE<20)|(MUX0<0)
  157. strr2,[r1]
  158. //ldrr3,[r0]
  159. //strr3,[r2]
  160. //movr2,r0
  161. ldrr1,=TCNTB0
  162. ldrr2,=10
  163. strr2,[r1]//r0就是c调用汇编的传递参数
  164. //movr0,r0,LSR#2
  165. ldrr1,=TCMPB0
  166. ldrr2,=2
  167. strr2,[r1]
  168. ldrr1,=TCON
  169. ldrr2,=(DZ_eable<4)|(auto_reload<3)|(inverter<2)|(man_update<1)|(start<0)
  170. strr2,[r1]
  171. ldrr1,=TCON
  172. ldrr2,=(DZ_eable<4)|(auto_reload<3)|(inverter<2)|(clear_man_update<1)|(start<0)
  173. strr2,[r1]
  174. ldrr2,=GPBDAT
  175. ldrr1,=0x1a0
  176. strr1,[r2]
  177. movpc,lr
  178. */
  179. main:
  180. ldrr2,=GPBDAT
  181. ldrr1,=0x1a0
  182. strr1,[r2]
  183. bldelay
  184. //ldrr1,=TCON
  185. //ldrr2,=(DZ_eable<4)|(auto_reload<3)|(inverter<2)|(man_update<1)|(stop<0)
  186. //strr2,[r1]
  187. /*
  188. ldrr2,=GPBCON
  189. ldrr1,[r2]
  190. ldrr1,[r1]
  191. //ldrr1,=0x15400
  192. bicr1,r1,#0x3
  193. orrr1,r1,#0x2
  194. strr1,[r2]
  195. ldrr0,=TCFG0
  196. ldrr1,=(Prescaler0<0)
  197. strr1,[r0]
  198. ldrr0,=TCFG1
  199. ldrr1,=(DMA_MODE<20)|(MUX0<0)
  200. strr1,[r0]
  201. ldrr0,=TCNTB0
  202. ldrr1,=10
  203. strr1,[r0]
  204. ldrr0,=TCMPB0
  205. ldrr1,=2
  206. strr1,[r0]
  207. ldrr0,=TCON
  208. ldrr1,=(DZ_eable<4)|(auto_reload<3)|(inverter<2)|(man_update<1)|(start<0)
  209. strr1,[r0]
  210. ldrr0,=TCON
  211. ldrr1,=(DZ_eable<4)|(auto_reload<3)|(inverter<2)|(clear_man_update<1)|(start<0)
  212. strr1,[r0]
  213. */
  214. ldrlr,=loop
  215. //ldrpc,_rtc_uart_test
  216. //_rtc_uart_test:.wordrtc_uart_test
  217. blrtc_uart_test
  218. ldrr2,=GPBDAT
  219. ldrr1,=0x1c0
  220. strr1,[r2]
  221. bldelay
  222. loop:
  223. ldrr2,=BCDSEC@BCDMIN
  224. ldrr1,[r2]
  225. cmpr1,#0x06
  226. bleqledon
  227. bloop@死循环
  228. ledon:
  229. ldrr2,=GPBDAT
  230. ldrr1,=0x160
  231. strr1,[r2]
  232. ldrr3,=0xffffff
  233. delay3:
  234. subr3,r3,#1
  235. cmpr3,#0x0
  236. bnedelay3
  237. movpc,lr
  238. undefined_instruction:
  239. nop
  240. software_interrupt:
  241. nop
  242. prefetch_abort:
  243. nop
  244. data_abort:
  245. nop
  246. not_used:
  247. nop
  248. fiq:
  249. nop


rtc_uart_test.s:

[cpp]view plaincopy

  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include"rtc_uart_test.h"
  7. externvoidBuzzer_Freq_Set(intfreq);
  8. //externvoidBuzzer_Freq_Set(void);
  9. charuart_GetByte(void)
  10. {
  11. while(!(rUTRSTAT0&0x1));//WaituntilTHRisempty.
  12. returnRdURXH0();
  13. }
  14. voiduart_GetString(char*pt)
  15. {
  16. while(*pt)
  17. uart_GetByte();
  18. }
  19. voiduart_SendByte(intdata)
  20. {
  21. if(data==)
  22. {
  23. while(!(rUTRSTAT0&0x2));
  24. WrUTXH0();
  25. }
  26. while(!(rUTRSTAT0&0x2));//WaituntilTHRisempty.
  27. WrUTXH0(data);
  28. }
  29. //====================================================================
  30. vo

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

网站地图

Top