论文部分内容阅读
【摘要】本文主要介绍用TMS320F2812_GHH(以下简称为DSP)的GPIO口作为ARINC429芯片的16位数据总线来实现数据的接收和发送,并利用DSP的GPIO口作为ARINC429芯片的控制线。这种控制方式避免了ARINC429总线与DSP和DSP与FPGA同时通信时的数据冲突,简单、实用、操作方便。
【关键词】DSP;ARINC429总线
DSP作为一款高性能的核心处理芯片,广泛应用于电子领域。DSP最高可在150MHz主频下工作,其片内集成众多资源。本文主要介绍用DSP的GPIO口作为ARINC429芯片的16位数据总线来实现数据的接收和发送,同时利用DSP的GPIO口作为ARINC429芯片的控制线。
1.典型连接图
如图1所示,DSP与FPGA采用DSP专用的19位地址线(可以根据需求选择地址线的位数)和16位数据线进行数据通信,而DSP与ARINC429专用芯片的通信则完全采用DSP自身的GPIO口资源,这样两者的通信互不影响、互不冲突,保证了数据的有效通信和实时性。同时ARINC429专用芯片的离散控制线也由DSP的GPIO口来控制。
2.软件控制的实现
在实际的编程中,可以用结构体来定义GPIO口构成的16位数据总线,这样不但优化了程序,而且程序操作简单,同时提高了程序的可读性和维护性。以下就是用这种方式的基本控制程序:
2.1 用结构体定义ARINC429总线
struct ARINC_BITS {
Uint16 ARINC0:1; // 0
Uint16 ARINC1:1; // 1
……
Uint16 ARINC14:1; // 14
Uint16 ARINC15:1; // 15
};
union ARINC_REG {
Uint16 all;
struct ARINC_BITS bit;
};
typedef union ARINC_REG Arinc_Reg;
2.2 用DSP的GPIO口定义16位数据线
#define DB0 GpioDataRegs.GPADAT.bit.GPIOA0
#define DB1 GpioDataRegs.GPADAT.bit.GPIOA1
……
#define DB14 GpioDataRegs.GPADAT.bit.GPIOA14
#define DB15 GpioDataRegs.GPADAT.bit.GPIOA15
2.3 16位总线数据写操作
void arinc16data_we(Uint16 a)
{
Arinc_Reg arinc_reg;
arinc_reg.all = a;
HI3582_DB0 = arinc_reg.bit.ARINC0;
HI3582_DB1 = arinc_reg.bit.ARINC1;
……
HI3582_DB14 = arinc_reg.bit.ARINC14;
HI3582_DB15 = arinc_reg.bit.ARINC15;
}
2.4 16位总线数据读操作
Uint16 arinc16data_rd()
{
Arinc_Reg arinc_reg;
arinc_reg.bit.ARINC0 = HI3582_DB0;
arinc_reg.bit.ARINC1 = HI3582_DB1;
……
arinc_reg.bit.ARINC14 = HI3582_DB14;
arinc_reg.bit.ARINC15 = HI3582_DB15;
return arinc_reg.all;
}
2.5 利用ARINC429芯片发送数据
void We_Data()
{
while(HI3582_TX_R==0);
EALLOW;
GpioMuxRegs.GPADIR.all=0xFFFF;
EDIS;
HI3582_PL1=1;
HI3582_PL2=1;
HI3582_ENTX=0;
HI3582_PL1=0;
a=F429DataL;
arinc16data_we(a);
asm(" RPT #180 || NOP");
HI3582_PL1=1;
HI3582_PL2=0;
a=F429DataH;
arinc16data_we(a);
asm(" RPT #180 || NOP");
HI3582_PL2=1;
HI3582_ENTX=1;
}
2.6 利用ARINC429芯片接收数据
void Rd_Data()
{
EALLOW;
GpioMuxRegs.GPADIR.all=0x0000;
EDIS;
HI3582_EN1=1;
HI3582_EN2=1;
HI3582_SEL=0;
HI3582_EN1=0;
asm(" RPT #20 || NOP");
recd1 = arinc16data_rd();
HI3582_EN1=1;
asm(" RPT #30 || NOP");
HI3582_SEL=1;
HI3582_EN1=0;
asm(" RPT #30 || NOP");
recd2 = arinc16data_rd();
HI3582_EN1=1;
}
3.结束语
本文用DSP的GPIO资源,巧妙地构成一个16位的双向数据线,即避免了与FPGA通信的冲突,又方便控制,是一个很好的方法,值得借鉴。
参考文献
[1]苏奎峰,吕强,耿庆锋,陈圣俭.TMS320F2812原理与开发[M].电子工业出版社,2005,4.
[2]谭浩强.C程序设计[M].清华大学出版社,1991,7.
【关键词】DSP;ARINC429总线
DSP作为一款高性能的核心处理芯片,广泛应用于电子领域。DSP最高可在150MHz主频下工作,其片内集成众多资源。本文主要介绍用DSP的GPIO口作为ARINC429芯片的16位数据总线来实现数据的接收和发送,同时利用DSP的GPIO口作为ARINC429芯片的控制线。
1.典型连接图
如图1所示,DSP与FPGA采用DSP专用的19位地址线(可以根据需求选择地址线的位数)和16位数据线进行数据通信,而DSP与ARINC429专用芯片的通信则完全采用DSP自身的GPIO口资源,这样两者的通信互不影响、互不冲突,保证了数据的有效通信和实时性。同时ARINC429专用芯片的离散控制线也由DSP的GPIO口来控制。
2.软件控制的实现
在实际的编程中,可以用结构体来定义GPIO口构成的16位数据总线,这样不但优化了程序,而且程序操作简单,同时提高了程序的可读性和维护性。以下就是用这种方式的基本控制程序:
2.1 用结构体定义ARINC429总线
struct ARINC_BITS {
Uint16 ARINC0:1; // 0
Uint16 ARINC1:1; // 1
……
Uint16 ARINC14:1; // 14
Uint16 ARINC15:1; // 15
};
union ARINC_REG {
Uint16 all;
struct ARINC_BITS bit;
};
typedef union ARINC_REG Arinc_Reg;
2.2 用DSP的GPIO口定义16位数据线
#define DB0 GpioDataRegs.GPADAT.bit.GPIOA0
#define DB1 GpioDataRegs.GPADAT.bit.GPIOA1
……
#define DB14 GpioDataRegs.GPADAT.bit.GPIOA14
#define DB15 GpioDataRegs.GPADAT.bit.GPIOA15
2.3 16位总线数据写操作
void arinc16data_we(Uint16 a)
{
Arinc_Reg arinc_reg;
arinc_reg.all = a;
HI3582_DB0 = arinc_reg.bit.ARINC0;
HI3582_DB1 = arinc_reg.bit.ARINC1;
……
HI3582_DB14 = arinc_reg.bit.ARINC14;
HI3582_DB15 = arinc_reg.bit.ARINC15;
}
2.4 16位总线数据读操作
Uint16 arinc16data_rd()
{
Arinc_Reg arinc_reg;
arinc_reg.bit.ARINC0 = HI3582_DB0;
arinc_reg.bit.ARINC1 = HI3582_DB1;
……
arinc_reg.bit.ARINC14 = HI3582_DB14;
arinc_reg.bit.ARINC15 = HI3582_DB15;
return arinc_reg.all;
}
2.5 利用ARINC429芯片发送数据
void We_Data()
{
while(HI3582_TX_R==0);
EALLOW;
GpioMuxRegs.GPADIR.all=0xFFFF;
EDIS;
HI3582_PL1=1;
HI3582_PL2=1;
HI3582_ENTX=0;
HI3582_PL1=0;
a=F429DataL;
arinc16data_we(a);
asm(" RPT #180 || NOP");
HI3582_PL1=1;
HI3582_PL2=0;
a=F429DataH;
arinc16data_we(a);
asm(" RPT #180 || NOP");
HI3582_PL2=1;
HI3582_ENTX=1;
}
2.6 利用ARINC429芯片接收数据
void Rd_Data()
{
EALLOW;
GpioMuxRegs.GPADIR.all=0x0000;
EDIS;
HI3582_EN1=1;
HI3582_EN2=1;
HI3582_SEL=0;
HI3582_EN1=0;
asm(" RPT #20 || NOP");
recd1 = arinc16data_rd();
HI3582_EN1=1;
asm(" RPT #30 || NOP");
HI3582_SEL=1;
HI3582_EN1=0;
asm(" RPT #30 || NOP");
recd2 = arinc16data_rd();
HI3582_EN1=1;
}
3.结束语
本文用DSP的GPIO资源,巧妙地构成一个16位的双向数据线,即避免了与FPGA通信的冲突,又方便控制,是一个很好的方法,值得借鉴。
参考文献
[1]苏奎峰,吕强,耿庆锋,陈圣俭.TMS320F2812原理与开发[M].电子工业出版社,2005,4.
[2]谭浩强.C程序设计[M].清华大学出版社,1991,7.