打印

新手求助AT91

[复制链接]
2144|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qvk789|  楼主 | 2011-10-7 10:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟今年刚毕业,新手一枚求大神指教,前段时间刚刚完成一个51单片机的项目,也就是C写写程序。现在带我们这帮菜鸟的工程师要我们ARM入门,AT91系列,不跑系统 就当一个高级的单片机的来做,要求是让8835控制芯片的320 240LCD显示出来。之前都是用编程器把程序烧到单片机上再把芯片插到板子上。由于对ARM知之甚少,JTAG这些也没接触过。求各位大神指点下怎么入门!不胜感激!!!

相关帖子

沙发
xhtxzxw| | 2011-10-14 11:40 | 只看该作者
51单片机 约= 51CPU + 51功能部件(GPIO(通用IO,就是P0~P3),Timer0,Timer1,[Timer2],UART(串口),中断控制器) + 代码存储器 + 数据存储器 + [扩展外部存储器]
ARM7 约=ARM7CPU + (各型号不同的)芯片内部功能部件(GPIO + Timer0~N + U[S]ART0~M + DMA0~P + SPI0~Q + USB + .......) + 代码存储器 + 数据存储器

使用ARM7,真正涉及到的主要就是内部功能部件的使用,按高级单片机理解的话,大结构类似,但是有一些区别,理解这些区别,就算是找到问题的核心了。

使用功能部件,本质上是访问(读写)属于这个功能部件的寄存器们(们:说明每个功能部件拥有不止一个寄存器)。

两个区别:
1、51的功能部件简单,所以,每个功能部件用很少几个寄存器就玩得开了,甚至几个功能部件合用一个寄存器。而ARM7的功能部件都比较复杂或很复杂,每个功能部件拥有几个甚至几十个寄存器,而且寄存器基本上都是32位的。
2、最关键的区别是这些寄存器的寻址风格不同。51里面的寄存器都是有地址的,但是几个存储空间有重叠部分,用起来要结合不同的寻址方式才能区分开,而ARM7就简单一些,寄存器的地址与代码存储器地址数和据存储器地址处于同一个寻址空间里。
针对以上两个区别(也就是ARM的特点吧),使用功能部件,就是对属于它的寄存器们的访问,再次强调“们”并说明一下“这些寄存器们(亲们)地址基本上是连续的”。
很简单的就有一个想法:把属于某个功能部件的那些寄存器们放在一个结构体变量里面(每个寄存器作为结构的一个字段),这个在C里很容易实现了,不过在C里结构体变量一般都是放在内存中,也就是数据存储器里面,这些结构体变量在内存里面的存储位置一般都是不定的,由系统自动分配,程序员一般不操心它放在哪儿了,现在这些寄存器们有固定的地址,跟存储器地址一致的地址(在相同的寻址空间里),所以就相当于需要程序员来给这个结构体变量“定位”,而且必须定位在寻址空间中与这些寄存器们的第一个寄存器地址一致的地方。
比如说,功能部件USART1拥有4个32位寄存器(实际上还要多),分别叫做USART1_REG0~USART1_REG3,  这四个寄存器的字节地址是0x20000000~0x2000000f, 定义以下结构:
struct USART{
unsigned int USART_REG0;
unsigned int USART_REG1;
unsigned int USART_REG2;
unsigned int USART_REG3;
}
直接定义变量:struct USART  USART1;
然后比如用:USART1.USART_REG0=多少多少;
                  然后比如用USART1.USART_REG1=多少多少;
似乎就可以使用这个功能部件了?
但这样做是不行的,因为C编译器会把这个USART1结构变量安排在数据存储器里,具体安排在哪个地址上,可很难预测的。几乎可以肯定不会安排在我们期望的USART_REG0的地址0x20000000这里.
所以,必须用下面的方法:
typedef USART*  pUSART;
定义一个指向USART结构变量的指针。
pUSART = (USART*)0x20000000;
从此pUSART就指向USART1的四个寄存器的第一个了!!!!
通过该机语言C,想访问属于功能部件串口1的地址为0x20000004的寄存器USART1_REG1就有可能了:
pUSART->USART_REG1=多少多少;(写操作),或者 int x=pUSART->USART_REG1;(读操作)

所以,使用功能部件,核心就是通过指针方式访问对应功能部件的寄存器结构体,之所以要用指针,是因为功能部件拥有的寄存器们有统一编址的固定地址。指针可以赋值,可以指哪儿打哪儿。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

1

粉丝