最近准备用DSP28335与NAT9914制作GPIB接口,利用zone7与nat9914连接,但是一直无法正确读写NAT9914寄存器,怀疑是读写时序问题,求高手指点。
部分代码 InitPll(DSP28_PLLCR,DSP28_DIVSEL); //设置时钟频率150MHZ void InitPeripheralClocks(void) { EALLOW; // HISPCP/LOSPCP prescale register settings, normally it will be set to default values SysCtrlRegs.HISPCP.all = 0x0001; SysCtrlRegs.LOSPCP.all = 0x0002; // XCLKOUT to SYSCLKOUT ratio. By default XCLKOUT = 1/4 SYSCLKOUT // XTIMCLK = SYSCLKOUT/2 XintfRegs.XINTCNF2.bit.XTIMCLK = 1; // XCLKOUT = XTIMCLK/2 XintfRegs.XINTCNF2.bit.CLKMODE = 1; // Enable XCLKOUT XintfRegs.XINTCNF2.bit.CLKOFF = 0; // Peripheral clock enables set for the selected peripherals. // If you are not using a peripheral leave the clock off // to save on power. // // Note: not all peripherals are available on all 2833x derivates. // Refer to the datasheet for your particular device. // // This function is not written to be an example of efficient code. SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // ADC // *IMPORTANT* // The ADC_cal function, which copies the ADC calibration values from TI reserved // OTP into the ADCREFSEL and ADCOFFTRIM registers, occurs automatically in the // Boot ROM. If the boot ROM code is bypassed during the debug process, the // following function MUST be called for the ADC to function according // to specification. The clocks to the ADC MUST be enabled before calling this // function. // See the device data manual and/or the ADC Reference // Manual for more information. ADC_cal(); SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 1; // I2C SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1; // SCI-A SysCtrlRegs.PCLKCR0.bit.SCIBENCLK = 1; // SCI-B SysCtrlRegs.PCLKCR0.bit.SCICENCLK = 1; // SCI-C SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1; // SPI-A SysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK = 1; // McBSP-A SysCtrlRegs.PCLKCR0.bit.MCBSPBENCLK = 1; // McBSP-B SysCtrlRegs.PCLKCR0.bit.ECANAENCLK=1; // eCAN-A SysCtrlRegs.PCLKCR0.bit.ECANBENCLK=1; // eCAN-B SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Disable TBCLK within the ePWM SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1; // ePWM1 SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1; // ePWM2 SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1; // ePWM3 SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1; // ePWM4 SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1; // ePWM5 SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1; // ePWM6 SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Enable TBCLK within the ePWM SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1; // eCAP3 SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1; // eCAP4 SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK = 1; // eCAP5 SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK = 1; // eCAP6 SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1; // eCAP1 SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1; // eCAP2 SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1; // eQEP1 SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK = 1; // eQEP2 SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0 SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1; // CPU Timer 1 SysCtrlRegs.PCLKCR3.bit.CPUTIMER2ENCLK = 1; // CPU Timer 2 SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 1; // DMA Clock SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1; // XTIMCLK SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // GPIO input clock EDIS; } void InitGpio(void) { EALLOW; //数据线 GpioCtrlRegs.GPCMUX1.bit.GPIO64=2; GpioCtrlRegs.GPCMUX1.bit.GPIO65=2; GpioCtrlRegs.GPCMUX1.bit.GPIO66=2; GpioCtrlRegs.GPCMUX1.bit.GPIO67=2; GpioCtrlRegs.GPCMUX1.bit.GPIO68=2; GpioCtrlRegs.GPCMUX1.bit.GPIO69=2; GpioCtrlRegs.GPCMUX1.bit.GPIO70=2; GpioCtrlRegs.GPCMUX1.bit.GPIO71=2; GpioCtrlRegs.GPCMUX1.bit.GPIO72=2; GpioCtrlRegs.GPCMUX1.bit.GPIO73=2; GpioCtrlRegs.GPCMUX1.bit.GPIO74=2; GpioCtrlRegs.GPCMUX1.bit.GPIO75=2; GpioCtrlRegs.GPCMUX1.bit.GPIO76=2; GpioCtrlRegs.GPCMUX1.bit.GPIO77=2; GpioCtrlRegs.GPCMUX1.bit.GPIO78=2; GpioCtrlRegs.GPCMUX1.bit.GPIO79=2; //地址线 GpioCtrlRegs.GPBMUX1.bit.GPIO40=2; GpioCtrlRegs.GPBMUX1.bit.GPIO41=2; GpioCtrlRegs.GPBMUX1.bit.GPIO42=2; GpioCtrlRegs.GPBMUX1.bit.GPIO43=2; GpioCtrlRegs.GPBMUX1.bit.GPIO44=2; GpioCtrlRegs.GPBMUX1.bit.GPIO45=2; GpioCtrlRegs.GPBMUX1.bit.GPIO46=2; GpioCtrlRegs.GPBMUX1.bit.GPIO47=2; GpioCtrlRegs.GPCMUX2.bit.GPIO80=2; GpioCtrlRegs.GPCMUX2.bit.GPIO81=2; GpioCtrlRegs.GPCMUX2.bit.GPIO82=2; GpioCtrlRegs.GPCMUX2.bit.GPIO83=2; GpioCtrlRegs.GPCMUX2.bit.GPIO84=2; GpioCtrlRegs.GPCMUX2.bit.GPIO85=2; GpioCtrlRegs.GPCMUX2.bit.GPIO86=2; GpioCtrlRegs.GPCMUX2.bit.GPIO87=2; GpioCtrlRegs.GPBMUX1.bit.GPIO39=2; GpioCtrlRegs.GPAMUX2.bit.GPIO31=2; GpioCtrlRegs.GPAMUX2.bit.GPIO30=2; GpioCtrlRegs.GPAMUX2.bit.GPIO29=2; //GPIO0:通用IO,输入,配置成中断XINT1,用于相应NAT9914的中断请求 GpioCtrlRegs.GPAMUX1.bit.GPIO0=0; GpioCtrlRegs.GPADIR.bit.GPIO0=0; //GPIO1:通用IO,输出,初始值设为0,高电平有效,用于RESET NAT9914 //GpioCtrlRegs.GPAMUX1.bit.GPIO1=0; //GpioCtrlRegs.GPADIR.bit.GPIO1=1; //GpioDataRegs.GPADAT.bit.GPIO1=0; //GPIO2:通用IO,输出,初始值设为1,用于使能芯片xx 1OE GpioCtrlRegs.GPAMUX1.bit.GPIO2=0; GpioCtrlRegs.GPADIR.bit.GPIO2=1; GpioDataRegs.GPADAT.bit.GPIO2=0; //GPIO3:通用IO,输出,初始值设为1,用于使能芯片xx 2OE GpioCtrlRegs.GPAMUX1.bit.GPIO3=0; GpioCtrlRegs.GPADIR.bit.GPIO3=1; GpioDataRegs.GPADAT.bit.GPIO3=0; //GPIO4:通用IO,输出,用于控制芯片xx 组1传输方向 高电平写入NAT9914 低电平从NAT9914读取,初始值设为0(低电平) GpioCtrlRegs.GPAMUX1.bit.GPIO4=0; GpioCtrlRegs.GPADIR.bit.GPIO4=1; GpioDataRegs.GPADAT.bit.GPIO4=0; //GPIO37:XZCS7 GpioCtrlRegs.GPBMUX1.bit.GPIO37=2; //GPIO38:XWE0 GpioCtrlRegs.GPBMUX1.bit.GPIO38=2; EDIS; } int inp(long io_address) //从nat9914读取数据 { int value; GpioDataRegs.GPADAT.bit.GPIO4 = 0; value=*(int *)io_address; return value; } void outp(long io_address,u_8 o_data) //向nat9914写入数据 { GpioDataRegs.GPADAT.bit.GPIO4 = 1; *(int *)io_address = o_data; }
|