• 学了5天Arm,今天谈谈初学感受 (转)



    一.初探 
         4月1日入手友善mini2440。先看了下板子,感觉没什么稀奇的,s3c2440总线上外挂SDRAM(对这个不是很感冒,之前搞过一个FPGA的SDRAM控制器),NOR    .   flash,Nand Flash, Enternet PHY +MAC芯片。心里视乎有点数了--------程序烧在Flash里,上电后s2c2440把代码从Flash调入DRAM执行…..直觉上想.  .   到应该有一个程序来完成copy的事,但是这个程序本是如何被最先调入Dram的呢(后边谈)。 
    .   接着打光盘里友善的手册,大致翻了一下,发现说的全是基于操作系统的编程和一点基本的操作,对初学的我来说掩盖了太多底层的细节。 

    .   本人专业是电气工程及其自动化,结合自己的情况我觉得应该先把Arm当单片机使更合适些。 

         1. 基于上边的想法我应该先从硬件上入手 

           (1)先搞清S3C2440里边到底有什么东西,是什么东西?不用说直奔Datasheet去了。 
                手册里的一张图解决了我的疑问 

     

     
     (原文件名:s3c2440.JPG) 



              S3C2440 = Arm920T + 挂在AHB上的一堆东西 + 挂在APB上的一堆东西 
              ARM920T = ARM920TDMI + 一堆东西 

              S3C2440里的外设都还好搞定,照着Datasheet来就行了。 

             下边重点落到了ARM920T上 
           (2)了解ARM920T 
        明确目的后直奔www.arm.com  点击Documention链接 

       

     
     (原文件名:arm header.JPG) 


               
              资料前几天已经上传 
              http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=3275791&bbs_page_no=1&bbs_id=1032 
            

     
     (原文件名:arm9TRM.JPG) 

    原来ARM920T = ARM9TDMI(CPU 核心) + MMU(内存管理单元-------内存保护,地址映射) 

            在ARM920T_TRM1_S.pdf里了解到 
            

     
     (原文件名:what is ARM920T.JPG) 



             到此为止我已经有了S3C2440的总体概念 

              S3C2440 = ARM9TDMI + MMU + 与AHB(高级高性能总线)互联的外设 + 与APB(高级外设总线)互联的设备 

    二.整理思路,制定学习计划 

           1 .硬件上 
             Ok现在基本上搞清状况了,至少知道自己在和什么东西打交道,思路清晰后我理出学习计划: 
            (1)学习S3C2440的使用,须从ARM9TDMI开始,具体的说ARM9TDMI的指令集,寻址方式……处理器状态,中断等(练习通过ADS在计算机上仿真)   .          

            (2)学习与ARM9TDMI 相伴左右的MMU的知识,如何实现能内存保护,虚地址到物理地址转换…..从这几天的研究看这些主要是通过协处理器CP15控制  .            的。 

               (前边说了ARM920T = ARM920TDMI + MMU 上边的搞定了ARM920T自然也就搞定了) 

            (3)学习S3C2440内外设的使用如lcd控制器,看门狗,定时器,实时钟,usb…..主要是S3C2440 Datasheet里的内容了,可以针对每个单独外设编写    .            程序练习。先学串口的使用,这对后边的的学习帮助较大,因为把程序运行结果从串口发到PC验证程序比较方便。 

           2. 软件上 
     既然选了带MMU的ARM就一定是想跑操作系统的 
     我计划是Linux方向 
    (1)(偏硬方向)Liunx基本操作(命令行)----一般Linux程序设计------Linux驱动编写----软件移植-----内核移植 
    (2)(偏软方向)Linux基本操作(命令行)---一般Linux程序设计-------网路编程,qt图形界面编程…… 
       (需要有基础知识--------汇编,C,c++,操作系统…) 

           3. 工具链使用 

    (1)编程工具 
         Windows平台下: 
    Windows平台下好想主要有这几种IDE:ads,keil,iar 
                    初期学习选择最不方便的-------ADS(当然还有更不不方便的比如直接在命令行编译,汇编,链接) 


         Linux平台下: 
            Gcc,汇编器,链接器使用 

            (2)调试工具 
                 mini2440自配的H-JATG, Jlink等调试器代理的使用和在IDE中如何配置 



               以上是我的学习思路和计划 

    三.寻找最初成就感 
        上边说了,我准备先把S3C2440当单片机用,下边是我的第一个Arm程序-------Led流水灯 


            运行平台: 友善mini2440 
            是否需要操作系统支持: 否 

            根据mini2440开发板光盘程序稍作修改所得 

            点击此处下载 ourdev_433343.rar(文件大小:63K) (原文件名:Led.rar)  
            程序很简单,最难的就是启动代码那块(直接用的光盘里的启动代码,最近在研究启动那块),其实启动代码本身并不难,就是完成以下几个功能 
             1.初始化堆栈, 
             2.设置中断, 
             3.初始化外设,时钟 
             4. 切换处理器模式 
             5.跳转到用户程序入口 

           程序可以直接通过supervivi下载到内存运行,因为程序小于4K所以也可以直接烧在Nand flash运行 
          (因为S3C2440支持从Nand引导,片内带有4kSRam用 于运行bootloader,就是前边说的用来copy的一小段bootloader) 

           arm的指令集还不熟,独立写一个启动代码还不行,过几天吃透了,单独发一贴谈谈启动代码。

  • 相关阅读:
    Java架构师必备技能:docker使用大全
    SpringBoot+ShardingSphere彻底解决生产环境数据库字段加解密问题
    记一次最近生产环境项目中发生的两个事故及处理方法
    【Java分享客栈】一个包装过简历的新同事写完微信支付引起事故后果断离职了
    【Java分享客栈】我为什么极力推荐XXLJOB作为中小厂的分布式任务调度平台
    StandardScaler/MinMaxScaler/Normalizer
    Vue开发配置
    如何从邮箱中批量下载距离当天最近一天的邮件附件.
    JavaScript获取页面上某个元素的方法
    OI小技巧
  • 原文地址:https://www.cnblogs.com/kwseeker-bolgs/p/4355725.html
Copyright © 2020-2023  润新知