TQ2440学习笔记(4): LED闪烁

编程思路

                  

核心初始化

1、参照S3C2440规格书,设置中断向量

2、设置SVC
  1). 关键词: bic orr MRS MSR CPSR SPSR
  -> mrs r0 cpsr          // cpsr 值保存到R0
  -> bic r0, r0,#0x1f     // 后5位清零
  -> orr r0, r0,#0x13     // 写1

  -> msr cpsr, r0

3、关闭看门狗
  将wtdog 填0
  #define pWTCON 0x53000000
  ldr r0, = pWTCON
  mov r1, #0x0
  str r1, [r0]

4、关闭中断
  将INTMASK寄存器 全部写1
  mvn r0, #0x0        //0取反赋值
  ldr r0, = #0x4a000008 // intmask 地址写入r0
  str r1, [r0]

5、关闭mmu和cache
  cache: 处于处理器和主存储器之间,用于缓存最近使用的数据拷贝,容量小,速度快。
  I-Cache: 存储命令

  D-Cache: 存储数据

  mmu: 将虚拟地址转换成真实地址

  -> mcr p15,0,r0,c7,c7,0 // icashe dcashe失效
  -> mrc p15,0,r0,c1,c0,0  //关闭id cashe 和mmu
  -> bic r0,r0,#0x00000007

  -> mcr p15,0,r0,c1,c0,0

点亮LED
1、设置控制寄存器
2、设置数据寄存器
代码
@***************************
@ File: start.S
@ Auth: Ryan
@ Date: 2018/04/11
@***************************

.text
.global _start
_start:
		/* 设置中断向量表 */
		b	reset
		ldr	pc, _undefined_instruction
		ldr pc, _software_interrupt
		ldr pc, _abort_prefetch
		ldr pc, _abort_data
		ldr pc, _not_use
		ldr pc, _irq
		ldr pc, _fiq

_undefined_instruction: .word undefined_instruction
_software_interrupt:	.word software_interrupt
_abort_prefetch:	    .word abort_prefetch
_abort_data:		    .word abort_data
_not_use:		        .word not_used
_irq:			        .word irq
_fiq:			        .word fiq

undefined_instruction:
        nop
            
software_interrupt:
        nop
		
abort_prefetch:
        nop

abort_data: 
        nop

not_used:
        nop
		
irq:
        nop

fiq:
        nop
		
reset:
        bl    set_svc
        bl    disable_watchdog
		bl    disable_irq
		bl    disable_mmu
		bl    set_led
		
/* set svc mode */		
set_svc:
        mrs  r0, cpsr	
		bic  r0,r0,#0x1f
		orr  r0,r0,#0x13
		msr  cpsr, r0
		mov pc, lr
		
#define pWTCON 0x53000000
disable_watchdog:
        ldr r0, = pWTCON
        mov r1, #0x0
        str r1, [r0] 
		mov pc, lr
		

/*disable interrput */
disable_irq:
        mvn r0, #0x0             
        ldr r0, = 0x4a000008     
	    str r1, [r0]
	    mov pc, lr

disable_mmu:
        mcr p15,0,r0,c7,c7,0 
        mrc p15,0,r0,c1,c0,0 
        bic r0,r0,#0x00000007
        mcr p15,0,r0,c1,c0,0
        mov pc, lr
		
		
#define GPBCON 0x56000010
#define GPBDAT 0x56000014
set_led:
	   ldr r0, =GPBCON
	   ldr r1,=0x15400
	   str r1, [r0]
	   
set_led_loop:
       ldr r0, =GPBDAT
	   ldr r1, = 0B11110011111   // PB5 PB6 is low
	   str r1, [r0]
	   bl  delay
       ldr r0, =GPBDAT
	   ldr r1, = 0B11001111111   // pb7 pb8 is low
	   str r1, [r0]
	   bl  delay
	   bl  set_led_loop
	   mov pc, lr

 
delay:
    ldr r2, =50000
    ldr r3, =0
delay_loop:
    sub r2, r2, #1      // r2=r2-1
    cmp r2, r3          // cmp 比较r2 r3 如果相等 Z 为1
    bne delay_loop      // 当Z为1时执行跳转
    mov pc, lr         
	
	



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值