微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 1553B总线在嵌入式系统中的应用

1553B总线在嵌入式系统中的应用

时间:01-29 来源:21IC中国电子网 点击:

RX: CIRC BUF INT

7

RX: MEMORY MANAGEMENT 2 (MM2)

6

RX: MEMORY MANAGEMENT 1 (MM1)

5

RX: MEMORY MANAGEMENT 0 (MM0)

4

BCST: EOM INT

3

BCST: CIRC BUF INT

2

BCST: MEMORY MANAGEMENT 2 (MM2)

1

BCST: MEMORY MANAGEMENT 1 (MM1)

0

BCST: MEMORY MANAGEMENT 0 (MM0)


注意,对于发送子地址,我们可以选择使用单缓冲或循环缓冲内存方式,而双缓冲模式则不用于发送子地址。

2.4.3 RT编程

对于RT编程,首先初始化相应的寄存器;然后设置非法区、初始化相应子地址的查询表及子地址控制字;最后设置配置寄存器1使设备处于RT模式。此后该设备就处于在线,只要BC发送一条消息命令与该设备相关,那么该设备就会做出反映。处理RT消息时,这里也有四个字的块描述符,即块状态字、时间标志字、数据块起始地址指针和接收到的16位命令字。与BC模式一样,要读取接收到的消息,我们应该首先从堆栈指针A中读取当前消息的堆栈指针,然后减4后来分别读出块状态字、时间标志字、上一条消息的块地址和命令字(该命令字中包含数据长度、RT地址、子地址以及是发送或接收标志);最后根据数据长度从此块地址读出接收到的数据。

2.5 MT模式操作

MT,即监控模式,它包含三种不同的总线监控模式:(1)字监控;(2)可选择的消息监控;(3)组合的RT/可选择的消息监控模式。本文主要介绍可选择的消息监控方式。消息监控包含一个命令堆栈和一个数据堆栈,它们位于RAM中固定的位置。

2.5.1 消息监控格式

在数据堆栈中的消息格式取决于要处理的消息类型。BC-To-RT命令传输会把命令字存储在监控命令字堆栈中,数据跟随在接收到的RT状态字后面一起存储在监控数据堆栈中。注意,读取到的监控消息需要:块状态字(用来决定消息是否是RT-To-RT传输),命令字(用来决定消息格式和字数,如发送、接收、模式编码、广播等),数据指针。

2.5.2 MT编程

对于MT编程,首先初始化相应寄存器及配置寄存器1来使该设备处于MT模式;然后初始化监控命令堆栈指针和数据堆栈指针,初始化可选择的监控查询表;最后启动MT。中断处理时,首先读取中断状态寄存器,判断是否是EOM中断;其次从命令字堆栈所初始化的堆栈地址开始读取块状态字、时间标志字、数据指针及命令字;最后从数据指针所指的地址中读取状态字和数据。注意,此后堆栈指针应该加4,一直到1K环绕。

3 软件部分

该软件部分主要工作在VxWorks嵌入式操作系统中,软件的任务首先是通过PCI总线查找PCI9052的存在与否,然后获取IO、内存以及中断资源以供驱动程序使用。软件的主要任务就是初始化DDC61580相关寄存器以及内存,并使之工作于其中一种模式(BC、RT或MT)。比如下面一段程序就是使DDC61580工作于RT模式。

//Start RT Test

for(i=0;i<256;i++)

_acMemWrite(STACK_A + i ,0x0000);



_acMemWrite(STACK_POINTER_A ,0x0000); //Initialize Stack



//Initialize lookup

for(i=0;i<128;i++)

_acMemWrite((LOOKUP_A + i) ,0xffff);



for(i=0;i<32;i++)

_acMemWrite((0x400 + i) ,0xffff);



_acMemWrite(0x162 ,0x0260); //sa2,transmit

_acMemWrite(0x1a2 ,0x8000); //sa2



_acMemWrite(0x143 ,0x0400); //sa3,receive

_acMemWrite(0x1a3 ,0x0260); //sa3,single message,EOM interrupt enabled



for(i=0;i<32;i++)

_acMemWrite((0x3c0 +i) ,0x0000); //sa2



for(i=0;i<32;i++)

_acMemWrite((0x400 + i) ,i);



_acRegWrite(REG_CFG1_RW,0x8f80); //0x8f80



4 CPLD逻辑部分

在该系统中,PCI9052采用的是ISA模式。对于ISA模式,首先必须确保硬件按照Datasheet上所说的进行配置,其次是EPROM内容的编写。EPROM内容最重要的就是LAS0RR、LAS1RR、LAS0BA、LAS1BA、CS0BASE和CS1BASE。它们分别对应于Local Configuration Registers偏移值为00h、04h、14h和18h。LAS0RR定义了内存地址空间大小,如0x1fff,那么它的值应为0xFFFE000;LAS1RR定义了IO地址空间大小,如0x3f,那么它的值应为0xFFFFFC1;LAS0BA为内存地址的基地址,也就是访问外部设备用的基地址,如0xD0001,表示外部设备内存基地址为0xD0000;LAS1BA为IO地址的基地址,也就是访问外部设备用的IO基地址,如0x201,表示外部设备内存基地址为0x200。CS0BASE和CS1BASE根据基地址和地址范围来定义。具体请参考PCI9052数据手册。

要访问外部设备(如基地址为0x200),PCI9052与外部设备之间就必须有相应的逻辑控制以使能够访问到外部设备。在PC机端只需要访问PCI配置寄存器读取的局部地址空间0、1即可。因为ISA->PCI之间的转换是PCI9052自动完成的。对于DDC61580,需要控制的信号有:/SELECT、/STRBD、MEM//REG、RD//WR、/MSTCLR、/READY;而对于PCI9052则需要/MEMRD、/MEMWR、/IORD、/IOWR、LRESET、CHRDY以及需要的地址信号,至于所需要的地址信号,我们可以和ISA总线进行地址译码一样。

懂得了上述PCI9052和DDC61580之间的逻辑关系,要表达出来就很容易了。具体的代码在此就不写了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top