复位
*rst_ft245(4003)=0x0;
delay(10);
*rst_ft245bm=0x01;
delay(10);
要让ADDR[4…0],XZCS,XWE都有效,只有一个ACTIVE周期,也就是4个DSP主频周期。也就是说RESRT_FT245BM存在4个DSP主频周期,低电平有效。
对于M2CONTROL模块,如图,有
编码初始化
M2_T/R=0, INT_D=1,RESET=0,这是复位的时候
经过初始化编码后
*wrctrl=0x1f1;//1 1111 0001初始化编码
如上图,
M2_T/R=1, INT_D=0,RESET=1,
CLEARM2FIFO,CLEARM5FIFO,CLEARM7FIFO=1
M2MR=0,M5RST=0,M7RST=0
m2cmd为高电平复位,需要加非门 (图有错) ,写入该命令后,m2cmd应该是结束复位状态,此时
M2FE=1,M2FF=0
status_edib=*rdstatus;
while(checkbit16(status_edib,0)==1)
{
status_edib=*rdstatus;
}
*wrcmd=cmddata[0];
读取状态,判断其第0位是否为0,为0跳出循环
也就是说,M2FF=0时,进行下一步将cmddata[0]写入*wrcmd处。
写入cmddata[0过程]
选中*wrcmd后
FFIN16=1,是触发器,会一直为1
WRREG=1,是选择器,只有一个脉冲,脉冲宽度为4个DSP主频
上图有错
FFIN[15…0]=PCB[15…0] 的,因为M2RXWR=0(经过了复位)
此时,第一个数据就写入了m2cmd
从m2cmd读出来
M2FE=0(是由1变为0)
M2SD=0,INIT_D=1(M2SD是错的,需要加一个非门)
MESTRAT=1
最先产生TXRDFIFO=1的脉冲,然后是LOADSR=1,STARTEE=1,M2EE就会输出高电平
当TXRDFIFO=1的脉冲产生,产生 RDREG=1 的脉冲,脉冲宽度为一个CLK
然后产生命令同步信号M2SS=1
然后m2cmdFIFO会被读出信号,FFOUT[16…0] 输出
LOADSR=1,FFOUT[15…0] 有数据,并串转换只会移动一位出去
RDREG=1,FE=1,FE上升沿,mebusy=1,直到meend=1之后,mebusy=0,,
写入数据进入m2cmd
for(i=0;i<cmddata[6];i++)
{
status_edib=*rdstatus;
while(checkbit16(status_edib,0)==1)
{
status_edib=*rdstatus;
}
temp=*downdata;
*wrdata=temp;
downdata++;
满信号不为1时,将 *WRDATA=TEMP写入
此时,FFIN16=0,数据进入后,M2FE=0
读出m2cmd数据,并串转换输出
此时,M2EE高电平后,M2SD就会有高电平过来,M2SD=1,持续16个M2ESC周期,
M2SD下降沿时,MEEND=1,LOADNEXT=1
才会输出下一个读信号REREG
在M2SD为高的这段时间,每个M2ESC周期,都会移位出去
编码过程大致如此