再上一篇:第六章 Xscale 应用处理器开发及应用实例
上一篇:6.1.2 Sitsang 板存储器及地址空间映射
主页
下一篇:6.1.4 Sitsang 板上设备及 IO 接口
再下一篇:6.2 Angel 和 ADS
文章列表

6.1.3 Sitsang 开发板寄存器

嵌入式系统(修订本)——Intel XScale 结构与开发 陈章龙 著

一、概述

Sitsang板上安装了这么多设备,那么,处理器PXA250如何得到这些设备的数据,以及 如何控制这些设备呢?这主要通过一些寄存器来实现,这些寄存器和Sitsang板上的设备直接 相关,被称为板级寄存器(Board Level Registers -BLRs)。

板级寄存器物理上既不在处理器内部,也不分散在各设备中,而是存在于一块被称为 CPLD(复杂可编程逻辑器件——Complex Programmable Logic Device)的芯片里。除了实现 这些板级寄存器外,CPLD 还负责外设的中断控制等。另外,它还为处理器和各设备之间提 供“胶合逻辑”。通过对它进行编程,可以得到需要的逻辑和时序功能,因而它是 Sitsang 板上的一个重要部件。顾名思义,CPLD 是可编程的,修改各种逻辑和时序功能只需重新编 程烧录即可,这一特性为板子的功能设计提供了极大的便利。Sitsang 板上安装的是一块 Xilinx 公司的CoolRunner CPLD 芯片。
下表列出了 Sitsang 上所有的板级寄存器。这些板级寄存器的地址被映射到内存空间, 由XS_Addr [6..2] 和 Xs_nCS2 编码确定。请注意虽然板级寄存器地址是4 字节对齐的,但 它的最大字宽只有16 比特。一般各种状态寄存器是只读的,而其它寄存器则是可读可写的。

表6-2 Sitsang板上的板级寄存器

寄存器名 全称(功能) 读写权限 地址

PCR 电源控制寄存器(Power control register) 读写 0x0800,0000


BCR 板级控制寄存器(Board control register) 读写 0x0800,0004

BSR 板级状态寄存器(Board status register) 只读 0x0800,0008


板级中断捕获寄存器(Board interrupt pending

BIPR

BIMR

AXHR

register)

板级中断屏蔽寄存器(Board interrupt mask register)
加速度感应器 X 方向逻辑高端计数器
(Accelerometer X direction logic high counter register)
读写 0x0800,000C
读写 0x0800,0010
只读 0x0800,0014

AXLR Reserved 只读 0x0800,0018


加速度感应器 Y 方向逻辑高端计数器

AYHR

JSSR LLEDR

HLEDR

(Accelerometer Y direction logic high counter register)

16 值预设开关,游戏杆及软件按钮状态寄存 器(HEX switch, Joystick switch and soft button status register)

低 16 位 LED 阵列控制寄存器(Low 16-bits

LED matrix control register)

高 16 位 LED 阵列控制寄存器(High 16-bits

LED matrix control register)

只读 0x0800,001C
只读 0x0800,0020
读写 0x0800,0024
读写 0x0800,0028

EX_BCR 扩展板控制寄存器(Expansion card board 读写 0x0800,002C

EX_BSR EX_BIPR EXPIMR

control register)

扩展板状态寄存器(Expansion card board status register)

扩展板中断捕获寄存器(Expansion card interrupt pending register)
扩展板中断屏蔽寄存器(Expansion card interrupt mask register)
只读 0x0800,0030 读写 0x0800,0034 读写 0x0800,0038

下面对几类重要寄存器加以分类说明。
二、控制和状态寄存器
板级控制寄存器(BCR)和板级状态寄存器(BSR)实现处理器和板上设备间的信息传 递功能。板级状态寄存器标识了各种外设的当前状态,如CF 卡、SD 卡、RS232 电缆、BTUART 电缆、USB 接头、扩展板等外部设备是否插入,电池是否正在充电,各个USB-HOST 是否 有过流现象,触摸屏的触笔是否按下,等等。而向板级控制寄存器写入有关信号则可以重启 CF 卡,网卡控制器,USB-HC 等设备,或者唤醒某些已睡眠的外设,或者设置某些设备属 性,如使某个区块的闪存写保护,等等。
板级控制寄存器 Board Control Register (BCR)各比特位功能描述见下表:

表6- 3 板级控制寄存器(BCR)

物理地址:0x0800,0004 读/写

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

SYS_RESET

EXBD_USE_ECLK

LAN_nEN16

LAN_RESET

IR_FSEL

IR_MODE1

IR_MODE0

USB_DC_PULL_UP

USB_HC_WAKE

USB_HC_RESET

USB_NDP

CF_CSEL

CF_RESET

BUS_OPEN

FLASH_B1_WP

FLASH_BO_WP

比特 名称 功能描述 复位值

0: 闪存区块0 可以被编程

0 FLASH_B0_WP

1 FLASH_B1_WP

2 BUS_OPEN

3 CF_RESET

4 CF_CSEL

0

1: 闪存区块0 写保护

0: 闪存区块1 可以被编程

0

1: 闪存区块1 写保护

0: 关总线收发器

0

1: 开总线收发器

0: 解除CF 卡重启信号

0

1: 设定CF 卡重启信号(使重启)

0: CF 卡是从设备(slaver) (仅限IDE 模式)

0

1: CF 设备是主设备(master)(仅限IDE 模式)

5 USB_NDP

6 USB_HC_RESET

7 USB_HC_WAKE

8 USB_DC_PULL_UP

9~10 IR_MODE[1:0]

11 IR_FSEL

12 LAN_RESET

13 LAN_nEN16

14 EXBD_USE_ECLK

15 SYS_nRESET


指定Root Hub支持的下游USB-Host端口数

0: 选择1个下游端口 0

1: 选择2个下游端口

0: 解除USB Host控制器ISP1161重启信号

0

1: 设定USB Host控制器ISP1161重启信号

0: ISP1161 Host 控制器不被唤醒

1: ISP1161 Host控制器被唤醒

0

一个“低到高”的跳变生成一个由远端把ISP1161从“待
机”状态唤醒的功能

0: USB设备的D+信号没有被上拉。

0

1: USB设备的D+信号被上拉。

00: 最大功率和作用距离

01: 关闭红外发射。

0

10: 2/3 功率和作用距离

11: 1/3 功率和作用距离 红外频率设定

0: SIR

0

1: MIR/FIR

控制红外芯片数据率,详见红外芯片供应商规范

0: 解除LAN91C96重启信号

1: 设定LAN91C96重启信号

0: LAN91C96 工作于16比特模式

0

1: LAN91C96工作于8比特模式

0: 在EX_BIPR中使用内部1MHz时钟捕捉外部中断源

0

1: 在EX_BIPR中使用外部时钟捕捉外部中断源

0: 解除硬重启信号

0

1: 重启整个系统,系统会被重新引导

设置板级控制寄存器的时候要注意以下几点:

1. 软件设置FLASH_Bx_WP 要绝对谨慎。如果在最开始的时候设了这一位,则系统上 电引导后,flash 就被这个软件操作锁住(写保护),因此没有机会下载新的映像文 件到flash 中。目前,这个功能在硬件上就被禁用了(R36 和R38 没有安装),如果 用户要使用它,请在R36 和R38 处装一个0 欧姆的电阻。

2. 软件设置SYS_nRESET 要绝对谨慎。如果在最开始的时候设了这一位,则系统上电 引导后,系统就被这个软件重启并再次运行这个软件,导致没有机会运行整个系统, 甚至没有机会下载新的映像文件到flash 中,因为重启时JTAG 通道没有工作。目前, 这个功能在硬件上就被禁用了(R69 没有安装),如果用户要使用它,请在R69 处装 一个100 欧姆的电阻。

3. 在BUS_OPEN 置‘1’之前,软件应确保VX 设备已经初始化。例如,若软件欲访 问CF 卡,它必须确保CF 卡用到的所有GPIO 已经初始化,CF 卡已经插入,并且 CF 卡的电源已经打开。

板级状态寄存器 Board Status Register (BSR) 各比特位功能描述见下表:

表6- 4 板级状态寄存器(BSR)

物理地址: 0x0800,0008 只读

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

SD_INSERT

CF_C ARD_INSERT

RS232_INSERT

BTUART_INSERT

BATT_CHARGING

USB_HC2_OC

USB_HC1_OC

SMSC_nINT_STATUS

CF_nIRQ_RDY_STATUS

USB_DC_INSERT

EXBD_INSERT

TS_PEN_DOWN

USB_INT_STATUS

BOOT_FROM_0

SD_WP

CF_IS5V

比特 名称 功能描述

0 CF_IS5V

1 SD_WP

2 BOOT_FROM_0

0: CF 卡可用3.3V 电压访问

1: CF 卡可用5V 电压访问

注:目前5V 的CF 卡Sitsang 板不支持

0: SD 卡未被锁住(写保护)

1: SD 卡已被锁住(写保护)

0: 从0 区块(bank0)引导

1: 从1 区块(bank1)引导

3 USB_INT_STATUS 监视 USB_INT 信号

0: 触摸屏触笔抬起

4 TS_PEN_DOWN

5 EXBD_INSERT

6 USB_DC_INSERT

1: 触摸屏触笔按下

0: 扩展板未插入

1: 扩展板已插入

0: USB Client 端口未有USB-host 设备插入

1: USB Client 端口已有USB-host 设备插入

7 CF_nIRQ_RDY_STATUS 监视CF_nIRQ_RDY 信号

8 SMSC_nINT_STATUS 监视SMSC_nINT 信号

0: USB HC1 口没有检测到过流状态

9 USB_HC1_OC

10 USB_HC2_OC

11 BATT_CHARGING

12 BTUART_INSERT

13 RS232_INSERT

14 CF_CARD_INSERT

15 SD_INSERT

1: USB HC1 口检测到过流状态

0: USB HC2 口没有检测到过流状态

1: USB HC2 口检测到过流状态

0: 电池不在充电

1: 电池正在充电

0: BT UART 未插入

1: BT UART 已插入

0: FF UART 未插入

1: FF UART 已插入

0: CF 卡未插入

1: CF 卡已插入

0: SD 卡未插入

1: SD 卡已插入

三、板级中断及相关寄存器
与板级中断相关的寄存器有板级中断捕获寄存器(BIPR)和板级中断屏蔽寄存器
(BIMR)。 当某个板上设备产生中断信号时,(根据实际情况,在中断捕获时钟的上升沿或下降沿
被检测到),在BIPR 中与该设备对应的位自动置‘1’。此时,若BIMR 的相应位等于1(1= 不屏蔽;0=屏蔽),则会触发与之关联的PXA250 的某个GPIO 管脚(GPIOx)的GPIOx 中 断请求。若干个设备共用一个 GPIOx 中断。整个中断的简化逻辑示意图如下,这些逻辑在 CPLD 中实现。图中没有画出中断捕获时钟以及一些复杂的逻辑电路。

中断源

BIPR BIMR BIPR[x]

BIMR[x]

BIPR[x]

AND

GPIO OR

BIMR[x]

BIPR[x]

BIMR[x]

GPIO

BIPR[x]

BIMR[x]

图6- 3 中断的逻辑示意图(简化)

为了捕捉其它中断或再次捕捉本中断,软件应尽快清除BIPR 中的该位. 注意,写 1 清 零,写 0 无效。

BIPR 内部逻辑电路可以防止中断丢失,即使两个共享同一个GPIO 引脚的中断源同时到 来。举例说明如下:

假设 IRQ1, IRQ2 和 IRQ3 共用同一个GPIO 中断引脚GPIOx,其在BIPR 中的对应位 分别为BIPR[1],BIPR[2],BIPR[3]。 IRQ1 和 IRQ2 几乎同时出现。

IRQ1

IRQ2

IRQ3

Clear BIPR

GPIO

CPU IRQ1 Handler IRQ2 Handler IRQ3 Handler

图6- 4 中断时序图

1. IRQ1 出现时,该中断在BIPR 的相应位BIPR[1]置‘1’,对应GPIO 引脚GPIOx 变 成高电平,触发GPIO 中断,CPU(PXA250)进入IRQ1 的处理程序。

2. 在CPU 退出IRQ1 的处理程序前,IRQ2 出现,对应的BIPR[2]自动置1,因为IRQ1

处理程序尚未结束,BIPR[1]仍然为1。

3. IRQ1 处理程序最后一条指令应对BIPR[1]写1 清零。CPLD 内部逻辑将GPIOx 拉到 低电平。此时BIPR[2]=1。

4. 1 微秒后,由于BIPR[2]=1,GPIOx 输出高电平,产生一个跳变,于是CPU 开始处 理IRQ2 的中断。

5. 当IRQ2 处理程序退出时,BIPR[2]清零,GPIO 回到低电平,直到另一个中断IRQ3

到来。

6. 写‘0’清零时,有可能丢失在寄存器值被读出后重新写入的瞬间到来的中断,而采 用写‘1’清零,写‘0’无效的模式可以防止这个问题。这也是通过CPLD 内部逻 辑来保证的。

板级中断捕获寄存器 Board Interrupt Pending Register (BIPR) 各比特位功能描述见下表:

表6- 5 板级中断捕获寄存器(BIPR)

物理地址:0x0800,000C 读写(特别注意:写 1 清除,写 0 无效果)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

TOUCH_SCREEN_IRQ

BATT_CHANGE_IRQ

JOYSTICK_IRQ

LAN_IRQ

SD_DETECT_IRQ

EXBD_DETECT_IRQ

BTUART_DETECT_IRQ

RS232_DETECT_IRQ

USB_HC_IRQ

USB_HC2_OC_IRQ

USB_HC1_OC_IRQ

保留

保留

USB_B_DETECT_IRQ

CF_IRQ

CF_CARD_DETECT_IRQ

比特 名称 功能描述

置‘1’,当 CF 卡的 nCD1 或 nCD2

用到的 复位

GPIO 值

0 CF_CARD_DETECT_IRQ

1 CF_IRQ

2 USB_B_DETECT_IRQ

信号被检测到有上升沿或下降沿时。 置‘1’,当 CF_nIRQ 的下降沿被检 测到时
置‘1’,当 USB-B 插入或拔出的上 升沿或下降沿被检测到时。

GP9 0

GP7 0

GP9 0

3 保留 保留 保留 0

4 保留 保留 保留 0


置‘1’,当USB-HC1 过流被检测到

5 USB_HC1_OC_IRQ

6 USB_HC2_OC_IRQ

7 USB_HC_IRQ


置‘1’,当USB-HC2 过流被检测到 时
置‘1’,当 ISP1161 INT1 信号的上 升沿被检测到时

GP0 0

GP0 0

GP7 0

8 RS232_DETECT_IRQ

9 BTUART_DETECT_IRQ

10 EXBD_DETECT_IRQ

11 SD_DETECT_IRQ

12 LAN_IRQ

13 JOYSTICK_IRQ


置‘1’,当FF UART 插入或拔出的 上升沿或下降沿被检测到时。 置‘1’,当BT UART 插入或拔出的 上升沿或下降沿被检测到时。 置‘1’,当扩展板的的EX_nDETECT_1 或

EX_nDETECT_2 信号的上升沿或下降沿 被检测到时。

置‘1’,当SD 卡插入或拔出的上升
沿或下降沿被检测到时。 置‘1’,当LAN91C96 的 IRQ 引脚 信号的下降沿被检测到时。

置‘1’,当游戏杆或软按钮(soft buttons)被按下或释放时。

GP9 0

GP9 0

GP9 0

GP9 0

GP5 0

GP4 0

14 BATT_CHARGED_IRQ 置‘1’,当电池开始或结束充电时。 GP0 0

15 TOUCH_SCREEN_IRQ 置‘1’,当触笔接触到触摸屏时。 GP4 0

1. 上表中的触发类型(上升沿或下降沿)设置只用于BIPR 捕捉中断源。不能用作

PXA250 GPIO 触发类型设置。软件可以设置GPIO 的触发类型。

2. 一个1MHZ 的时钟用于捕捉这两种触发类型的中断源。(CF_DETECT, SD_DETECT, USB_B_DETECT and EXBD_Detect 除外,这些中断可以被一个2Hz 的时钟触发,以 消除信号的抖动干扰。)

板级中断屏蔽寄存器 Board Interrupt Mask Register (BIMR) 各比特位功能描述见下表:

表6- 6 板级中断屏蔽寄存器(BIMR)

物理地址 : 0x0800,0010 读写

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

TOUCH_SCREEN_IRQ_MASK

BATT_CHANGE_IRQ_MASK

JOYSTICK_IRQ_MASK

LAN_IRQ_MASK

SD_DETECT_IRQ_MASK

EXBD_DETECT_IRQ_MASK

BTUART_DETECT_IRQ_MASK

RS232_DETECT_IRQ_MASK

USB_HC_IRQ_MASK

USB_HC2_OC_IRQ_MASK

USB_HC1_OC_IRQ_MASK

保留

保留

USB_B_DETECT_IRQ_MASK

CF_IRQ_MASK

CF_CARD_DETECT_IRQ_MAS

比特 名称 功能描述 复位值

0: 屏蔽

0..15 IRQ_MASK

0

1: 不屏蔽


四、扩展板相关的寄存器
扩展板控制寄存器Expansion card board control register (EX_BCR) 各比特位功能描述见 下表:

表6- 7 扩展板控制寄存器(EX_BCR)

物理地址: 0x0800,002C 读/写

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

保留

保留

保留

保留

保留

保留

保留

保留

EX_BCR7

EX_BCR6

EX_BCR5

EX_BCR4

EX_BCR3

EX_BCR2

EX_BCR1

EX_BCR0

比特 名称 功能描述 复位值

0: 逻辑低电平

0..15 EX_BCR

0

1: 逻辑高电平

从 CPLD 到扩展槽有 8 个输出信号。这些信号的值由 EX_BCR 的对应位控制。1 为高 电平,0 为低电平。系统启动后,这些位都被清零,软件可以按需要置为‘1’。
扩展板状态寄存器 Expansion card board status register (EX_BSR) 各比特位功能描述见 下表:

表6- 8 扩展板状态寄存器(EX_BSR)

物理地址: 0x0800,0030 只读

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

EX_BSR15

EX_BSR14

EX_BSR13

EX_BSR12

EX_BSR11

EX_BSR10

EX_BSR9

EX_BSR8

EX_BSR7

EX_BSR6

EX_BSR5

EX_BSR4

EX_BSR3

EX_BSR2

EX_BSR1

EX_BSR0

比特 名称 功能描述 复位值

0: 逻辑低电平

0..15 EX_BSR

0

1: 逻辑高电平


从扩展槽到 CPLD 有 16 个输入信号。这些信号由 EX_BSR 监视。1 为逻辑高位,0 为
逻辑低位。Sitsang 板上对这些信号没有上拉或下拉电阻。扩展板的设计者需要让没有用到 的EX_BSRx 开路或者用10K ~ 100K 欧姆的电阻上拉/下拉。如果开路,信号会是低电平。 对于用到的 EX_BSRx,要确保硬件能驱动足够的稳定的电平。否则,应用 3K 的电阻上拉 或下拉这些信号。例如,如果用户准备使用EX_BSR 监测一个按钮状态,应该加一个3K 欧 姆的上拉电阻以确保按钮没有被按下时对应的是高电平。
扩展板中断捕获寄存器Expansion card interrupt pending register (EX_BIPR) 和 扩展板中断捕获寄存器Expansion card interrupt mask register (EX_BIMR) 各比特位功能描述见下二表:

表6- 9 扩展板中断捕获寄存器(EX_BIPR)

物理地址: 0x0800,0034 读写

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

EX_BIPR3

EX_BIPR2

EX_BIPR1

EX_BIPR0

比特 名称 功能描述 复位值

0: 无中断被捕获

0..3 EX_BIPRx

0

1: 有中断被捕获

4..15 保留 保留


往相应位写1 清除EX_BIPR ,写零无效。

表6- 10 扩展板中断屏蔽寄存器(EX_BIMR) 物理地址:0x0800,0038 读写

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

EX_BIMR3

EX_BIMR2

EX_BIMR1

EX_BIMR0

比特

名称

功能描述

用到的GPIO

复位值

0..3

4~15

EX_BIMRx

保留

0: 屏蔽

1: 不屏蔽 保留

GP10

0



从扩展槽到CPLD 有4 个输入信号。当其中任何一个信号改变时,EX_BIPR 中的对应
位被置为‘1’。此外,如果对应的EX_BIMRx 位为1,GPIO10 上会有一个中断被触发。一 个 1MHz 时钟信号被用于捕捉中断源的改变。另外,还有一个外部时钟信号从扩展槽连接 到 CPLD。把 BCR 中的 EXBD_USE_ECLK 置 1,则使用这个外部时钟代替那个 1MHz 的 内置时钟去捕捉外部中断源。

Sitsang 板上对这些信号没有上拉或下拉电阻。扩展板的设计者需要让没有用到的 EX_ BIPRx 开路或者用10K ~ 100K 欧姆的电阻上拉/下拉。如果开路,信号是低电平。对于用到 的 EX_BSRx 和 EX_BIPRx,要确保硬件能驱动足够的稳定的电平。否则,应用 3K 的电阻 上拉或下拉这些信号。例如,如果用户准备使用一个按钮信号来触发EX_ BIPR,应该加一 个3K 欧姆的上拉电阻以确保按钮没有被按下时对应的是高电平。

五、其它寄存器
下面简单介绍一下其余的几个寄存器,具体比特位含义和设置可以参见 Sitsang / PXA250 Evaluation Platform User's Guide。
电源控制寄存器(PCR)实现了对整个系统和各个板上设备的电源控制。通过写这个 寄存器,可以打开或关闭各个模块的电源。关闭未使用模块的电源,可以有效地节省能源, 提高电池的使用时间。

JSSR 和xLEDR 实现人机交互的功能。

16 值预设开关,游戏杆及软件按钮状态寄存器(JSSR)。16 值旋钮式预设开关被旋拨 到哪个值?五个方向(前、后、左、右、垂直向下)的游戏杆的某个方向是否被按下?几个 软件按钮是否被按下?这些信息都存在于JSSR 中,处理器通过读取这个寄存器,获得用户 的设置以及各种输入。

LED 阵列控制寄存器(LLEDR, HLEDR)。程序中设置这个寄存器,可以点亮或熄 灭指定的 LED。这样,用户就可以获得有关的程序状态信息。比如,在软件的主循环中设 置某个LED 的定时闪烁,可以用作程序的“心跳”指示,程序正常运行时,该LED 有规律 的闪烁,如果长亮或长灭,说明程序陷入死机状态。参考下一小节的“LED 指示”部分。

另外,Sitsang 板上装了一个有趣的加速度感应器。通过这个感应器,用户可以知道 Sitsang 板在X,Y 两个方向上的的加速运动状况。加速度感应器计数器(AXHR,AYHR) 分别提供了这两个方向上加速度的数据,通过简单运算就可以得到 Sitsang 板在两个方向上 运动的加速度。这个功能可以用于游戏或装在运动物体(如汽车)上作状态监视用。