先来简单介绍一下GPMC。TI特有的总线但是中文资料较少,有过嵌入式驱动开发经验的人最初一定会接触GPIO,而GPMC与GPIO类似,说白了就是一种总线扩展,通过配置其寄存器来进行一系列的操作。
配置GPMC寄存器是驱动程序最先考虑的部分。首先通过查看手册找到GPMC相关寄存器的物理地址:
根据手册上的定义在驱动程序中进行预定义如下所示:
依然是通过查看手册得知,GPMC控制片选CS0~CS6的寄存器由CONFIG7_i配置(项目所需),由此查看CONFIG7_i32位寄存器内容定义,如下所示:
由此需要从CONFIG7_i中读出保留字进行分析(根据相关资料显示一般GPMC有八个片寻CS0-CS7,其中CS0-1是用来做FLASH的,其余的片选可根据需求来选。)
读出来的数据对高6位左移24位作为基地址,后四位代表size(具体编码需要查看手册),这个范围就是就是片选空间了,这个范围必然落在0x00000000~0x3FFFFFFF这1G空间(详见手册)。
对读出来的值分析再通过查原理图发现:本例中CS0做FLASH,CS6做网卡驱动,而CS1-CS5是预留的后续工作就是根据自己的需求往里面写东西了。