基于DSP+FPGA的数字输入输出接口及控制方法
技术领域
本发明涉及一种电数字处理技术领域,特别是一种基于DSP+FPGA的数字输入输出接口及控制方法。
背景技术
DSP也称数字信号处理器,是一种特别适合于进行数字信号处理运算的微处理器,其主要应用是实时快速地实现各种数字信号处理算法。在当今的数字化时代背景下,DSP己成为通信、计算机、消费类电子产品等领域的基础器件。TMS320F28335是一款TI高性能TMS320C28x系列32位浮点DSP处理器,其具有的高精度ADC、PWM单元等资源尤其适用于电机控制、太阳能组串式逆变器等,但在通用数字输入输出接口扩展设计方面偏弱,另外,根据DSP芯片的特点,也不适合用于扩展DI、DO接口。
FPGA即现场可编程门阵列,它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。LFXP2-5E是Lattice公司推出的一款具备非易失特性的FPGA芯片,该芯片支持瞬间上电、透明现场升级等特性,广泛应用于通信、工业控制等领域。
发明内容
本发明的目的在于提供一种基于DSP+FPGA的数字输入输出接口及控制方法。
实现本发明目的的第一种技术方案为:一种基于DSP+FPGA的数字输入输出接口,包括两个光耦隔离器、FPGA、DSP;其中第一光耦隔离器设置于FPGA的输入端一侧为FPGA提供输入信号,第二光耦隔离器设置于FPGA的输出端一侧接收FPGA输出信号,FPGA与DSP的引脚连接,其中FPGA的时钟引脚与DSP的XCLKOUT连接,FPGA的片选使能信号引脚与DSP的片选信号引脚连接,FPGA的写信号使能引脚与DSP的写信号引脚连接,FPGA的读信号使能引脚与DSP的读信号引脚连接,FPGA的地址输入引脚与DSP的地址输出引脚通过地址总线连接,FPGA的数据输入引脚与DSP的数据输出引脚通过数据总线连接。
采用上述接口,第一光耦隔离器光电二极管的阳极分别接第一二极管阴极、第二电阻第一引脚,第一光耦隔离器光电二极管的阴极分别接第一二极管阳极、第二电阻第二引脚和第一电阻第二引脚,第一电阻第一引脚为输入接口,第一光耦隔离器光敏三极管的集电极分别接第三电阻第二引脚和FPGA输入端,第一光耦隔离器光敏三极管发射极接地,第三电阻第一引脚接VCC;第二光耦隔离器光敏三极管的集电极接第四电阻第二引脚,第二光耦隔离器光敏二极管发射极接地,第四电阻第一引脚为输出接口;第二光耦隔离器发光二极管阳极接VCC,第二光耦隔离器光电二极管阴极接第五电阻第一引脚,第五电阻第二引脚接FPGA输出端。
实现本发明目的的第二种技术方案为:对输出信号Output1写操作主要通过进程process1和进程process2完成;对输入信号Input1读操作主要通过进程process3和进程process4完成;
(1)进程process1由片选信号CS7n及写信号WRn驱动。
A1、是否检测到片选信号CS7n及写信号WRn同时为0,如果是,则执行步骤B1;
B1、判断地址总线ADDRESS值是否等于address1值,如果相等,则将数据总线DATA值赋予信号dataIn;
(2)进程process2由时钟信号CLK驱动。
A2、检测是否有时钟CLK上升沿事件,如果是,则按顺序依次执行步骤B2、C2、D2;
B2、判断是否检测到写信号WRn上升沿,且地址总线ADDRESS值等于address1值,如果同时满足上述条件,则将信号Flag_DataIn赋1,否则,将信号Flag_DataIn赋0;
C2、判断信号Flag_DataIn的值是否为1,如果是1,则执行步骤D2;
D2、判断如果信号DSP输出的数据DataIn的值等于“0000000000000001”,则将信号Output1赋0;如果信号DataIn的值是否等于“0000000000000000”,则将信号Output1赋1;
当将信号Output1赋0时,第二光耦隔离器(U2)的输出信号DO1被下拉至外部参考地GND_EX;
当将信号Output1赋1时,输出信号DO1被上拉至外部电源VCC;
(3)进程process3由片选信号CS7n及读信号RDn驱动。
A3、是否检测到片选信号CS7n及读信号RDn同时为0,如果是,则执行步骤B3;
B3、判断地址总线ADDRESS值是否等于address2值,如果相等,则将信号dataOut值赋予数据总线DATA;
(4)进程process4由时钟信号CLK驱动。
A4、检测是否有时钟CLK上升沿事件,即rising_edge(CLK),如果是,则按顺序依次执行步骤B4、C4;
B4、判断是否检测到读信号RDn上升沿,即rising_edge(RDn),且地址总线ADDRESS值等于address2值,如果同时满足上述条件,则执行步骤C4;
C4、判断如果输入信号Input1的值等于0,则将信号dataOut赋“0000000000000001”;如果输入信号Input1的值不等于0,则将信号dataOut赋“0000000000000000”。
本发明采用DSP+FPGA组合架构的控制方式中,将算法运算、信号处理等任务在DSP上完成,充分发挥DSP在数字信号处理方面的优势;通过FPGA来实现通用数字输入输入接口扩展功能,最大程度利用FPGA易于扩展的特性。
下面结合说明书附图对本发明作进一步描述。
附图说明
图1为系统电气接线图。
图2为XINTF Zone7地址区间示意图。
图3为DI1与DO1的Zone7区域对应地址示意图。
图4为DSP输入输出接口读写示意图。
图5为FPGA输出接口Output1写操作示意图。
图6为FPGA输入接口Input1读操作示意图。
具体实施方式
如图1所示,本发明涉及的电路系统包括第一单元U1、第二单元U2、第三单元U3、第四单元U4、第一电阻R1、第二电阻R2、第三电阻R3、第四电阻R4、第五电阻R5、第一二极管D1、电源VCC3V3,虚线内部分在应用端连接,电阻R的值远大于第四电阻R4的值。其中,第一单元U1与第二单元U2的型号为TLP2801,第三单元U3的型号为LFXP2-5E,第四单元U4的型号为TMS320F28335。
输入接口DI1连接第一电阻R1的一端,第一电阻R1的另一端连接第一单元U1的2引脚。外部电源VCC_EX连接第一单元U1的1引脚。第二电阻R2并联在第一单元U1的1引脚和2引脚之间。第一二极管D1的阳极连接第一单元U1的1引脚,阴极连接第一单元U1的2引脚。第一单元U1的4引脚通过第三电阻R3上拉至电源VCC3V3,第一单元U1的4引脚下拉至GND。第一单元U1的4引脚通过信号Input1连接至第三单元U3。
输出接口DO1连接第四电阻R4的一端,第四电阻R4的另一端连接第二单元U2的4引脚。第二单元U2的3引脚下拉至外部参考地GND_EX。电源VCC3V3接至第二单元U2的1引脚,第二单元U2的2引脚通过第五电阻R5接至第三单元U3,连接信号为Output1。
第四单元U4引脚XCLKOUT通过信号CLK接至第三单元U3,第四单元U4引脚XZCS7_B通过信号CS7n接至第三单元U3,第四单元U4引脚XWE0_B通过信号WRn接至第三单元U3,第四单元U4引脚XRD_B通过信号RDn接至第三单元U3,第四单元U4引脚XA0~XA6通过7位地址总线ADDRESS接至第三单元U3,第四单元U4引脚XD0~XD15通过16位数据总线DATA接至第三单元U3。
当输入信号DI1为低电平时,第一单元U1的引脚1和引脚2之间的二极管正向导通,引脚4和引脚3之间的光敏晶体管正向导通,信号Input1被下拉至GND;当输入信号DI1为高电平时,第一单元U1的引脚1和引脚2之间的二极管正向截止,引脚4和引脚3之间的光敏晶体管截止,信号Input1被上至电源VCC3V3。
当信号Output1输出低电平时,第二单元U2的引脚1和引脚2之间的二极管正向导通,第二单元U2的引脚4和引脚3之间的光敏晶体管正向导通,输出信号DO1被下拉至外部参考地GND_EX;当信号Output1输出高电平时,第二单元U2的引脚1和引脚2之间的二极管正向截止,第二单元U2的引脚4和引脚3之间的光敏晶体管正向截止,输出信号DO1被上拉至外部电源VCC_EX。
为实现FPGA与DSP操作的同步性,FPGA的时钟由DSP通过引脚XCLKOUT提供,时钟信号为CLK。分别通过向DSP的XINTFCNF2寄存器XTIMCLK位和CLKMODE位写1来使CLK=XCLKOUT=SYSCLKOUT/4。
如图2所示,FPGA映射到DSP的XINTF Zone7地址空间,该地址空间的范围为0x00200000~0x00300000。在本发明中,地址总线的位数为7,满足寻址的要求。
如图3所示,输入信号DI1对应于信号Input1,信号Input1与地址address1信号关联,地址信号address1对应于地址0x00200000。输出信号DO1对应于信号Output1,信号Output1与地址address2信号关联,地址信号address2对应于地址0x00200001。
如图4所示,在DSP软件程序中,读取地址信号address1所指空间,并将其赋给变量DI1_Value,根据变量DI1_Value值判断输入信号DI1的状态。通过向地址信号address2所指空间写变量DO1_Value值的方式对输出信号DO1赋值,DO1_Value的整数值为1或0。
如图5所示,在FPGA软件程序中,对输出信号Output1写操作主要通过进程process1和进程process2完成。
进程process1由片选信号CS7n及写信号WRn驱动。
(1)是否检测到片选信号CS7n及写信号WRn同时为0,如果是,则执行步骤(2);
(2)判断地址总线ADDRESS值是否等于address1值,如果相等,则将数据总线DATA值赋予信号dataIn。
进程process2由时钟信号CLK驱动。
(1)检测是否有时钟CLK上升沿事件,即rising_edge(CLK),如果是,则按顺序依次执行步骤(2)、(3)、(4);
(2)判断是否检测到写信号WRn上升沿,即rising_edge(WRn),且地址总线ADDRESS值等于address1值,如果同时满足上述条件,则将信号Flag_DataIn(数据标志信号)赋1,否则,将信号Flag_DataIn赋0。无论是否同时满足上述条件,执行步骤(3);
(3)判断信号Flag_DataIn的值是否为1,如果是1,则执行步骤(4);
(4)判断如果信号DataIn的值等于“0000000000000001”,则将信号Output1赋0;如果信号DataIn的值是否等于“0000000000000000”,则将信号Output1赋1。
由图1分析可知,当将信号Output1赋0时,输出信号DO1被下拉至外部参考地GND_EX;当将信号Output1赋1时,输出信号DO1被上拉至外部电源VCC_EX。
如图6所示,在FPGA软件程序中,对输入信号Input1读操作主要通过进程process3和进程process4完成。
进程process3由片选信号CS7n及读信号RDn驱动。
(1)是否检测到片选信号CS7n及读信号RDn同时为0,如果是,则执行步骤(2);
(2)判断地址总线ADDRESS值是否等于address2值,如果相等,则将信号dataOut值赋予数据总线DATA。
进程process4由时钟信号CLK驱动。
(1)检测是否有时钟CLK上升沿事件,即rising_edge(CLK),如果是,则按顺序依次执行步骤(2)、(3);
(2)判断是否检测到读信号RDn上升沿,即rising_edge(RDn),且地址总线ADDRESS值等于address2值,如果同时满足上述条件,则执行步骤(3);
(3)判断如果输入信号Input1的值等于0,则将信号dataOut赋“0000000000000001”;如果输入信号Input1的值不等于0,则将信号dataOut赋“0000000000000000”。
由图1分析可知,当输入信号DI1为低电平时,输入信号Input1被下拉至GND,即,输入信号Input1的值等于0;当输入信号DI1为高电平时,输入信号Input1被上拉至VCC3V3,即,输入信号Input1的值不等于0。
当信号Output1输出低电平时,第二单元U2的引脚1和引脚2之间的二极管正向导通,第二单元U2的引脚4和引脚3之间的光敏晶体管正向导通,输出信号DO1被下拉至外部参考地GND_EX;当信号Output1输出高电平时,第二单元U2的引脚1和引脚2之间的二极管正向截止,第二单元U2的引脚4和引脚3之间的光敏晶体管正向截止,输出信号DO1被上拉至外部电源VCC_EX。