基于PPC8270的BSP开发与实现
扫描二维码
随时随地手机看文章
摘要:为了驱动基于PPC8270的底层硬件环境,达到为操作系统提供稳定运行环境和标准软件接口的目的,通过对PPC8270内部寄存器的基本结构、内部存储空间映射和BSP软件的研究,以及目标机硬件环境初始化和硬件驱动的开发,完成了基于PPC8270的BSP软件开发。经过操作系统运行试验证明,该BSP软件很好地实现了其中间层软件的功能,达到了预定的开发目的。
关键词:PPC8270;BSP;硬件驱动程序;底层硬件
0 引言
PPC8270是一款通用的通信协议处理器芯片,片上集成了高性能的PPC精简指令系统微处理器、非常灵活的系统集成单元以及多种通信协议控制器以支持不同的应用,特别是在通信及网络系统的应用环境中有着十分广泛的应用。基于PPC8270的BSP开发为上层系统软件操作底层硬件环境提供了丰富而有效的软件接口,进而为应用软件的开发提供有力的支持。
1 PPC8270处理器介绍
1.1 PPC8270内部寄存器基本结构
PPC8270采用G2_LE内核,该内核设计继承了G2内核与PPC603e内核的设计,其寄存器可根据访问权限分为用户模式(USER MODEL)与超级模式(SUPERVISOR MODEL)。
1.2 PPC8270内部存储器空间
在超级模式下,PPC8270所有内部寄存器均可被访问,而在用户模式下,只有部分寄存器可被访问,其内部寄存器访问定义如图1所示。
PPC8270拥有256 KB内部存储空间,该内部存储空间被影射在一块4 GB范围内连续的内存空间上,可根据IMMR(Internal Memory Map Register)寄存器设置该内部存储空间起始地址,本开发实例设置IMMR值为0xF0000000;PPC8270内部存储空间映射如图2所示。
PPC8270内部寄存器均通过IMMR值与寄存器偏移量进行寻址,从而完成BSP开发中对内部寄存器的读/写访问。
2 BSP软件的定义与职责
2.1 BSP软件的定义
所谓BSP软件通常是指针对具体的硬件平台、用户编写的驱动代码和部分设备驱动的集合。它所实现的功能包括初始化、驱动部分设备。BSP软件是介于底层硬件设备环境和上层操作系统之间的一个软件接口,它的主要功能是系统加电后初始化目标机硬件、初始化操作系统及提供部分硬件的驱动程序。BSP软件属于嵌入式软件的一部分,其在目标机应用系统中的层次如图3所示。
BSP软件是根据具体的硬件环境进行设计和开发的,因此只能运行在指定设备的硬件环境中。
2.2 BSP软件的职责
根据上节关于BSP软件的定义,BSP软件的职责主要包括以下两点:
(1)目标机硬件环境的初始化。
(2)硬件驱动程序的集成。访问硬件设备驱动程序,BSP必须包含设备驱动程序的相关支持、设备的配置管理等。
3 PPC8270的BSP开发过程
3.1 目标机硬件环境的初始化
所谓目标机硬件环境的初始化是指从目标机系统上电复位开始到操作系统开始初始化用户应用时的一段时间内系统所执行的过程,该过程主要包括两部分工作:CPU初始化和目标机初始化。
3.1.1 CPU初始化
CPU初始化的目的是通过对CPU内部各种控制与状态寄存器的设置来使得CPU具有确定的工作方式和稳定的状态,在该开发实例中,主要完成以下几种工作:
(1)设置CPU启动方式为冷启动;
(2)通过IMMR设置PPC8270芯片内部存储空间为0xF0000000;
(3)通过清除MSR(Machine state register)使PPC8270芯片达到初始工作状态;
(4)根据应用需求对目标系统进行空间配置,并进行IBAT,DBAT以及TLB的初始化;
(5)初始化指令Cache和数据Cache;
(6)初始化栈地址为0x20000。
3.1.2 目标机初始化
初始化控制芯片的寄存器、I/O设备寄存器,为整个软件系统提供底层硬件环境的支持。在该开发实例中,目标机的初始化主要完成:
(1)将目标机启动地址设置为0xFFF00100;
(2)PCI总线的初始化,包括PCI总线配置地址和数据地址的指定;
(3)SDRAM初始化;
(4)将FLASH基地址配置为0xFF800000;
(5)通过清除MSR(Machine State Register)使PPC8270芯片达到初始工作状态。
3.2 硬件驱动程序的开发
PPC8270的BSP开发涉及的基本硬件资源包括串口控制器、中断控制器、定时器、网络控制器,在该开发实例中,上述基本硬件资源均采用PPC8270处理器内部集成的控制芯片。
3.2.1 串口控制器驱动开发
串口通信是目标机与宿主机联系的桥梁,在BSP的硬件驱动开发中,通常首先进行的是串口控制器的开发,从而为后续的开发工作提供更多的调试途径。在该开发实例中采用PPC8270内部集成的SCC(Serial Communications Controllers)作为串口控制器,根据上层操作系统的需求,串口控制器驱动应具有的基本功能包括:串口初始化和串口的读/写。
串口控制器的驱动开发首先应完成串口初始化的工作,使串口芯片达到一个确定的工作状态,主要包括以下几个方面的内容:
(1)输入/输出端口的初始化。PPC8270内部包含4路通用的输入/输出端口。每路输入/输出端口包含4组独立的可读/写的配置寄存器:PODRA(Port OpenDrain Registers)-PODRD,PDIRA(Port Data Direction Registers)-PDIRD,PSORA(Port Special Options Registe-rs)-PSORD和PDATA(Port Data Registers)-PDATD。根据本实例硬件设计,采用第四路输入/输出端口,因此应对其各配置寄存器进行设置,并将其与采用的串口通道进行连接。
(2)串口波特率的初始化。对于SCC的波特率初始化可通过PPC8270内部BRGs(Baud-Rate Generators)来实现,并通过CMXSCR(CMX SCC Clock Route Register)的设置将BRG的设置与具体的串口通道进行连接。在该实例中,设置串口波特率为115 200 Kb。
(3)缓冲区描述符的初始化。SCC接收数据和发送数据的缓冲区是通过缓冲区描述符来指定的,包括接收缓冲区描述符和发送缓冲区描述符。SCC缓冲区描述符的结构如图4所示。
SCC串口发送和接收数据均通过缓冲区描述符来查询数据状态与地址,因此,缓冲区描述符的初始化应完成缓冲区描述符起始地址的指定、缓冲区长度的初始化以及串口发送接收的工作方式设置。
(4)参数RAM的初始化。SCC中每一路串口通道均可以进行独立的参数RAM初始化,主要完成本串口通道基地址、串口中断处理方式以及串口数据的传送方式的设置。
(5)UART工作方式设置。
(6)串口中断向量的挂接。
在完成串口初始化的基础上,可以进一步进行串口读/写功能的开发。基于SCC的串口读/写控制是通过缓冲区描述符来实现的。当接收缓冲区描述符中指定的缓冲区地址有新的接收数据到达时,接收缓冲区描述符的状态会发生改变。当发送缓冲区描述符中指定的缓冲区地址有新的发送数据到达时,发送缓冲区描述符的状态会发生改变。因此,可以通过对缓冲区描述符状态的监控,来确定何时从接收缓冲区拷贝数据以及何时将发送数据拷贝至发送缓冲区,从而完成串口数据的接收和发送。
3.2.2 中断控制器驱动开发
中断机制是目标机感知事件的重要手段,PPC8270具有内部集成的中断控制器,对各类中断源的中断向量号进行了明确的定义,并在一定程度上规定了各类中断源的中断优先级。在中断控制器驱动中,应实现的主要功能包括:中断控制器的初始化、中断向量的获取以及中断的使能与禁止。
(1)中断控制器的初始化。PPC8270集成中断控制器的初始化过程较为简单,主要的工作是通过SIMR(SIU Interrupt Mask Registers)的设置将所有中断源对应的中断信号进行禁止。
(2)中断向量的获取。PPC8270集成中断控制器获取中断向量可通过读取SIVEC(SIU Interrupt Vector Register)寄存器来获得。
(3)中断的使能和禁止。在PPC8270集成中断控制器中,通过对SIMR中相应数据位的置位与复位操作来实现指定中断源的使能与禁止。
3.2.3 定时器驱动开发
定时器是一种特殊的中断源,可为系统运行提供时间精度的支持,PPC8270内部具有4路独立的16位定时器,也可以作为2路32位定时器使用,4路定时器分别拥有独立的寄存器组:包括TMR(Timer Mode Register),TCR(Timer Counter Register),TRR(Timer Reference Register),TER(Timer Event Register),TGCR(Timer Global Configuration Register),可以根据应用的需要对相应的寄存器进行设置来完成定时器的初始化、定时器的使能与禁止、定时器频率的设置与获取等功能。
(1)定时器的初始化。定时器的初始化主要是通过TRR来完成定时器的时钟频率设置并将指定的定时器中断连接到相应的中断处理程序。
(2)定时器的启动与停止。定时器的启动与停止应能够根据指定的定时器通道完成定时器的启动与停止,包含两方面的内容:即指定定时器中断向量的使能与禁止和通过TGCR对指定定时器进行的启动与停止。
(3)定时器频率的设置与获取。
3.2.4 网卡控制器驱动开发
在进行网卡控制器驱动开发前,目标机系统与宿主机之间的通信是通过串口来实现的,虽然能够满足通信的功能,但面对大数据量的通信任务时,其性能却远不能满足应用的需求。网卡控制器驱动的开发是目标机系统通讯能力实现升级的重要环节,为操作系统、应用程序的加载提供了更为高速的通路。
(1)FCC的特征
PPC8270采用内部集成的FCC(Fast Communications Controller)作为网卡控制器,FCC是为了适应高速传输协议而升级的SCC,具有如下特征:
①支持HDLC(High-level data link control)/SDLC(Synchronous data link control);
②FCC时钟既可以通过内部BRG获得,也可以通过外部时钟源获得;
③通过缓冲区描述符进行发送接收数据缓冲区管理;
④192 B FIFO(First In First Out)缓冲区;
⑤全双工工作模式;
⑥支持数据回绕测试模式。
(2)基于FCC的网卡控制器驱动开发
基于FCC的网卡控制器驱动开发应包含网卡初始化、网口读/写功能。其中,网卡初始化是实现网卡正常工作的关键,其初始化过程需要在上电复位后对一系列的寄存器及参数进行设置,在本开发实例中的网卡初始化过程所述如下:
①输入/输出端口的初始化;
②通过配置GFMR(General FCC Mode Registers)MODE位选择FCC的工作模式为以太网模式,并禁止发送和接收事件;
③根据系统需求通过FPSMR(FCC Protocol-Spe-cific Mode Registers)配置FCC在以太网模式下的各种工作参数,包括CRC校验、心跳检查、全双工模式等;
④通过配置FDSR指定同步协议中的帧同步过程。由于FCC工作在以太网模式,选用推荐值0xD555;
⑤配置FCC的参数RAM,指定接收与发送缓冲区描述符的地址,并对其进行初始化;
⑥通过FCCE(FCC Event)寄存器清除所有FCC外部中断事件,并通过FCCM(FCC Mask)使能所有在FCCE中指定的事件;
⑦使能网卡中断向量,并连接相应的中断处理程序;
⑧发送INIT TX AND RX PARAMETERS命令,并通过GFMR使能发送与接收事件。
在完成网卡初始化后,可以通过判断网卡中断的状态来区分发送和接收事件,并从相应的缓冲描述符中获取缓冲区地址,实现数据的发送和接收,此过程与第3.2.1节中SCC的发送与接收过程相似。
4 结语
本文通过对目标机硬件环境初始化过程和硬件驱动开发过程的描述,详细介绍了基于PPC8270的BSP开发过程。在该开发实例中,该BSP软件能够在目标机模块上稳定运行,并为上层操作系统及应用程序提供有效的运行支持。在今后的工作中,将对该BSP软件的而可移植性进行进一步的优化,以便其能更好的应用于其他BSP软件的开发实例中。