GNU ARM汇编--(十)s3c2440的RTC
时间:11-26
来源:互联网
点击:
- =0x8f888@0x0@0x8f888@~(7|(7<4)|(7<8)|(7<16))//低电平触发中断
- ldrr1,=0xafaaa@0x0@0x8f888//下降沿触发中断
- strr1,[r0]
- ldrr0,=EINTPEND
- ldrr1,=0xf0@0b10000
- strr1,[r0]
- ldrr0,=EINTMASK
- ldrr1,=0x00@0b00000
- strr1,[r0]
- ldrr0,=SRCPND
- ldrr1,=0x3ff|(1<30)@0x1@0b11111
- strr1,[r0]
- ldrr0,=SUBSRCPND
- ldrr1,=0x1<13
- strr1,[r0]
- ldrr0,=INTPND
- ldrr1,=0x3ff|(1<30)@0x1@0b11111
- strr1,[r0]
- ldrr0,=INTSUBMSK
- ldrr1,=0x0<13
- strr1,[r0]
- ldrr0,=INTMSK
- ldrr1,=0x1ffff000@0b00000
- strr1,[r0]
- MRSr1,cpsr
- BICr1,r1,#0x80
- MSRcpsr_c,r1
- blmain
- irq:
- sublr,lr,#4
- stmfdsp!,{r0-r12,lr}
- blirq_isr
- ldmfdsp!,{r0-r12,pc}^
- irq_isr:
- ldrr2,=GPBDAT
- ldrr1,=0x0e0
- strr1,[r2]
- ldrr3,=0xffffff
- delay2:
- subr3,r3,#1
- cmpr3,#0x0
- bnedelay2
- //这上面的延时必须要,否则蜂鸣器的声音有问题
- ldrr0,=EINTPEND
- ldrr1,=0xf0
- strr1,[r0]
- ldrr0,=SRCPND
- ldrr1,=0x3ff|(1<30)@0b11111
- strr1,[r0]
- ldrr0,=SUBSRCPND
- ldrr1,=0x1<13
- strr1,[r0]
- ldrr0,=INTPND
- ldrr1,=0x3ff|(1<30)@0b11111
- strr1,[r0]
- ldrr2,=GPBCON
- ldrr1,[r2]
- ldrr1,[r1]
- //ldrr1,=0x15400
- bicr1,r1,#0x3
- orrr1,r1,#0x2
- strr1,[r2]
- ldrr2,=GPBDAT
- ldrr1,=0x1a0
- strr1,[r2]
- ldrr1,=TCFG0
- ldrr2,=(Prescaler0<0)
- strr2,[r1]
- ldrr1,=TCFG1
- ldrr2,=(DMA_MODE<20)|(MUX0<0)
- strr2,[r1]
- //ldrr3,[r0]
- //strr3,[r2]
- //movr2,r0
- ldrr1,=TCNTB0
- ldrr2,=10
- strr2,[r1]//r0就是c调用汇编的传递参数
- //movr0,r0,LSR#2
- ldrr1,=TCMPB0
- ldrr2,=2
- strr2,[r1]
- ldrr1,=TCON
- ldrr2,=(DZ_eable<4)|(auto_reload<3)|(inverter<2)|(man_update<1)|(start<0)
- strr2,[r1]
- ldrr1,=TCON
- ldrr2,=(DZ_eable<4)|(auto_reload<3)|(inverter<2)|(clear_man_update<1)|(start<0)
- strr2,[r1]
- ldrr2,=GPBDAT
- ldrr1,=0x1a0
- strr1,[r2]
- movpc,lr
- delay:
- ldrr3,=0xffffff
- delay1:
- subr3,r3,#1
- cmpr3,#0x0
- bnedelay1
- movpc,lr
- clock_setup:
- ldrr0,=LOCKTIME
- ldrr1,=0xffffffff
- strr1,[r0]
- ldrr0,=CLKdivN
- ldrr1,=(divN_UPLL<3)|(HdivN<1)|(PdivN<0)
- strr1,[r0]
- ldrr0,=UPLLCON
- ldrr1,=(U_Mdiv<12)|(U_Pdiv<4)|(U_Sdiv<0)@Fin=12MUPLL=48M
- strr1,[r0]
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- ldrr0,=MPLLCON
- ldrr1,=(M_Mdiv<12)|(M_Pdiv<4)|(M_Sdiv<0)@Fin=12MFCLK=400M
- strr1,[r0]
- movpc,lr
- uart_init:
- ldrr0,=GPHCON
- ldrr1,=0x2aaaa@配置GPIO复用规则为串口
- strr1,[r0]
- ldrr0,=ULCON0
- ldrr1,=(IR_MODE<6)|(Parity_Mode<3)|(Num_of_stop_bit<2)|(Word_length<0)@
- strr1,[r0]
- ldrr0,=UCON0
- 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)
- strr1,[r0]
- ldrr0,=UFCON0
- ldrr1,=(Tx_FIFO_Trig_Level<6)|(Rx_FIFO_Trig_Level<4)|(Tx_FIFO_Reset<2)|(Rx_FIFO_Reset<1)|(FIFO_Enable<0)@
- strr1,[r0]
- ldrr0,=UBRdiv0
- ldrr1,=(UBRdiv<0)
- strr1,[r0]
- movpc,lr
- /*
- Buzzer_Freq_Set:
- //ldrr0,=GPBCON
- //ldrr1,=0x15400@这个时候暂不配置GPB0为TOUT0,这时候只是配置GPB0为TOUT0
- //strr1,[r0]
- ldrr2,=GPBCON
- ldrr1,[r2]
- ldrr1,[r1]
- //ldrr1,=0x15400
- bicr1,r1,#0x3
- orrr1,r1,#0x2
- strr1,[r2]
- ldrr2,=GPBDAT
- ldrr1,=0x1a0
- strr1,[r2]
- ldrr1,=TCFG0
- ldrr2,=(Prescaler0<0)
- strr2,[r1]
- ldrr1,=TCFG1
- ldrr2,=(DMA_MODE<20)|(MUX0<0)
- strr2,[r1]
- //ldrr3,[r0]
- //strr3,[r2]
- //movr2,r0
- ldrr1,=TCNTB0
- ldrr2,=10
- strr2,[r1]//r0就是c调用汇编的传递参数
- //movr0,r0,LSR#2
- ldrr1,=TCMPB0
- ldrr2,=2
- strr2,[r1]
- ldrr1,=TCON
- ldrr2,=(DZ_eable<4)|(auto_reload<3)|(inverter<2)|(man_update<1)|(start<0)
- strr2,[r1]
- ldrr1,=TCON
- ldrr2,=(DZ_eable<4)|(auto_reload<3)|(inverter<2)|(clear_man_update<1)|(start<0)
- strr2,[r1]
- ldrr2,=GPBDAT
- ldrr1,=0x1a0
- strr1,[r2]
- movpc,lr
- */
- main:
- ldrr2,=GPBDAT
- ldrr1,=0x1a0
- strr1,[r2]
- bldelay
- //ldrr1,=TCON
- //ldrr2,=(DZ_eable<4)|(auto_reload<3)|(inverter<2)|(man_update<1)|(stop<0)
- //strr2,[r1]
- /*
- ldrr2,=GPBCON
- ldrr1,[r2]
- ldrr1,[r1]
- //ldrr1,=0x15400
- bicr1,r1,#0x3
- orrr1,r1,#0x2
- strr1,[r2]
- ldrr0,=TCFG0
- ldrr1,=(Prescaler0<0)
- strr1,[r0]
- ldrr0,=TCFG1
- ldrr1,=(DMA_MODE<20)|(MUX0<0)
- strr1,[r0]
- ldrr0,=TCNTB0
- ldrr1,=10
- strr1,[r0]
- ldrr0,=TCMPB0
- ldrr1,=2
- strr1,[r0]
- ldrr0,=TCON
- ldrr1,=(DZ_eable<4)|(auto_reload<3)|(inverter<2)|(man_update<1)|(start<0)
- strr1,[r0]
- ldrr0,=TCON
- ldrr1,=(DZ_eable<4)|(auto_reload<3)|(inverter<2)|(clear_man_update<1)|(start<0)
- strr1,[r0]
- */
- ldrlr,=loop
- //ldrpc,_rtc_uart_test
- //_rtc_uart_test:.wordrtc_uart_test
- blrtc_uart_test
- ldrr2,=GPBDAT
- ldrr1,=0x1c0
- strr1,[r2]
- bldelay
- loop:
- ldrr2,=BCDSEC@BCDMIN
- ldrr1,[r2]
- cmpr1,#0x06
- bleqledon
- bloop@死循环
- ledon:
- ldrr2,=GPBDAT
- ldrr1,=0x160
- strr1,[r2]
- ldrr3,=0xffffff
- delay3:
- subr3,r3,#1
- cmpr3,#0x0
- bnedelay3
- movpc,lr
- undefined_instruction:
- nop
- software_interrupt:
- nop
- prefetch_abort:
- nop
- data_abort:
- nop
- not_used:
- nop
- fiq:
- nop
rtc_uart_test.s:
[cpp]view plaincopy
- #include
- #include
- #include
- #include
- #include
- #include"rtc_uart_test.h"
- externvoidBuzzer_Freq_Set(intfreq);
- //externvoidBuzzer_Freq_Set(void);
- charuart_GetByte(void)
- {
- while(!(rUTRSTAT0&0x1));//WaituntilTHRisempty.
- returnRdURXH0();
- }
- voiduart_GetString(char*pt)
- {
- while(*pt)
- uart_GetByte();
- }
- voiduart_SendByte(intdata)
- {
- if(data==)
- {
- while(!(rUTRSTAT0&0x2));
- WrUTXH0();
- }
- while(!(rUTRSTAT0&0x2));//WaituntilTHRisempty.
- WrUTXH0(data);
- }
- //====================================================================
- vo
ARM汇编s3c2440RT 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)