CPLD器件的在系统动态配置
Void ispVMEnd(void){
IspVMStateMachine(RESET);/*TAP状态机进入Test-Logic-Reset状态*/
IspVMDelay(1);/*一段延时后,器件由配置模式切换到运行模式*/
}
事实上,作为专门针对嵌入式平台的配置工具ispVM EMBEDDED并不依赖于特定的硬件或系统平台,所以可以很容易地往用户自己的系统上移植。3个与硬件相关的函数需要用户自己改写,Readprot()从输入引脚读一个字节,Writeport()通过输出引脚向外发送一个字节,ispVMDelay()系统延时。在MSP430上的实现如下:
#define pinTDI 0x02 //定义P2.1为TDI
#define pinTDO 0x08 //定义P2.3为TDO
short int isp_pins用来存放当前JTAG口的引脚信号
unsigned char readPort(void){
unsigned char PortVal;
PortVal=P2IN; //读取P2口
return ((unsigned char)(PortVal &pinTDO)?0x01:0x00));//返回TDO引脚信号
}
void writePort(unsigned char pins,unsigned char value){
if(value)
isp_pins=pins|isp_pins;//把isp-pins引脚置高
else
isp_pins=~pins&isp_pins;//把isp-pins引脚置低
P2OUT=isp_pins;
}
void ispVMDeay(unsigned short int delay_time){//delay_time来自于配置文件,通过它告诉配置引擎具体需要延时多久
if(delay_time &0xA000){//ms级延时
delay_time &=~0xA000;
}
else if(delay_time>=1000)//如果是μs级,转换成ms级延时
delay_time=delay_time/1000;
else
delay_time=1;//延时小于1ms时,就延时1ms
《CPLD器件的在系统动态配置(第3页)》