查看: 1806|回复: 2

[原创] tq2440学习笔记—TQ2440裸跑-init(中断控制器)

[复制链接]
  • TA的每日心情
    奋斗
    2017-4-18 08:38
  • 签到天数: 110 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2014-8-19 17:05:36 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 霹雳之火 于 2014-8-19 21:58 编辑

            0实验环境与实验例程        实验环境:TQ2440
    实验例程:韦东山 嵌入式linux应用开发完全手册
            1 makefile分析
                            
    •   objs := head.o init.o interrupt.o main.o
    • int.bin: $(objs)
    • arm-linux-ld -Ttext 0x00000000 -o int_elf $^;$^表示所有依赖的文件,指$(objs)
    • arm-linux-objcopy -O binary -S int_elf $@;$@指目标文件
    • arm-linux-objdump -D -m arm int_elf > int.dis
    • %.o:%.c
    • arm-linux-gcc -Wall -O2 -c -o $@ $<
    • %.o:%.S
    • arm-linux-gcc -Wall -O2 -c -o $@ $<
    • clean:
    • rm -f int.bin int_elf int.dis *.o
            

    Makefile执行过程

                            
    • arm-linux-gcc -Wall -O2 -c -o head.o head.S
    • arm-linux-gcc -Wall -O2 -c -o init.o init.c
    • arm-linux-gcc -Wall -O2 -c -o serial.o serial.c
    • arm-linux-gcc -Wall -O2 -c -o main.o main.c
    • arm-linux-ld -Tuart.lds -o uart_elf head.o init.o serial.o main.o
    • arm-linux-objcopy -O binary -S uart_elf uart.bin
    • arm-linux-objdump -D -m arm uart_elf > uart.dis
            2原理图
    index.png

            3源码分析中断向量地址
            
            
                            
    • .extern main
    • .text
    • .global _start
    • _start:
    •                                 @******************************************************************************
    • @ 异常向量,本程序中,除Reset和HandleIRQ外,其它异常都没有使用
    •                                 @******************************************************************************
    •   b   Reset
    • @ 0x04: 未定义指令中止模式的向量地址
    • HandleUndef:
    • b   HandleUndef
    • @ 0x08: 管理模式的向量地址,通过SWI指令进入此模式
    • HandleSWI:
    •   b   HandleSWI
    • @ 0x0c: 指令预取终止导致的异常的向量地址
    • HandlePrefetchAbort:
    •   b   HandlePrefetchAbort
    • @ 0x10: 数据访问终止导致的异常的向量地址
    • HandleDataAbort:
    • b   HandleDataAbort
    • @ 0x14: 保留
    • HandleNotUsed:
    • b   HandleNotUsed
    • @ 0x18: 中断模式的向量地址
    • b   HandleIRQ
    • @ 0x1c: 快中断模式的向量地址
    • HandleFIQ:
    • b   HandleFIQ
          
      4总结使用c代码之前就要设置栈指针                                    
    •   Reset:
    • ldr sp, =4096           @ 设置栈指针,以下都是C函数,调用前需要设好栈
    • bl disable_watch_dog   @ 关闭WATCHDOG,否则CPU会不断重启
            
            


    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-8-19 19:16:11 | 显示全部楼层
    学习笔记非常好!楼主可以整个汇总啦
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-8-15 09:30
  • 签到天数: 162 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-8-19 22:43:11 | 显示全部楼层
    连载教程,顶!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 07:33 , Processed in 0.135837 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.