|
楼主 |
发表于 2010-12-19 21:34:21
|
显示全部楼层
严重怀疑驱动库有问题,个人认为应该有如下判断:
/*---------------------------------------------------------------------------------------------------------*/
/* PWM */
/*---------------------------------------------------------------------------------------------------------*/
case E_FUNC_PWM01:
{
/* EBI function enable */
if(EBI->CON.ExtEN ==ENABLE)
{
outpw(&SYS->P4_MFP, (inpw(&SYS->P4_MFP) & ~(0x3<<8)) | (0x3<<0)); //P4.0 P4.1
}else{
outpw(&SYS->P2_MFP, (inpw(&SYS->P2_MFP) | (0x3<<((E_FUNC_PWM01-E_FUNC_PWM01)*2)+8)) & ~(0x3<<((E_FUNC_PWM01-E_FUNC_PWM01)*2)));
}
}break;
另外,当EBI总线设置开启时,按照库中代码:
case E_FUNC_EBI_16B:
{
outpw(&SYS->P2_MFP, (inpw(&SYS->P2_MFP) & ~(0xFF<<8)) | (0xFF<<0)); //P2 AD8-15
}
case E_FUNC_EBI_8B:
{
outpw(&SYS->P0_MFP, (inpw(&SYS->P0_MFP) & ~(0xFF<<8)) | (0xFF<<0)); //P0 AD0-7
outpw(&SYS->P3_MFP, (inpw(&SYS->P3_MFP) | (0x1<<11)) & ~(0x1<<3)); //P3.3 MCLK
outpw(&SYS->P3_MFP, (inpw(&SYS->P3_MFP) & ~(0x3<<14)) | (0x3<<6)); //P3.6 P3.7 WR RD
outpw(&SYS->P4_MFP, (inpw(&SYS->P4_MFP) & ~(0x3<<12)) | (0x3<<4)); //P4 上的CS 和 ALE
}
break;
单步调试时会发现,如果设置为16bit,则会运行完case E_FUNC_EBI_16B后,由于没有break还会继续运行case E_FUNC_EBI_8B里的配置,这样就把EBI总线全部设置好了,但如果设置为8bit时,第一个case是不执行的,也就是说P2口是不配置的,只配置case E_FUNC_EBI_8B里的P0口和CS RD WR等其他几个管脚,但按照时序即时设置为8bit时,发送地址时也是16bit地址啊,那不配置P2口如何送高端的地址呢?这也就是我开始提的问题:当EBI使能时,设置成16BIT模式时P2口是可以输出地址的,但设为8BIT模式时P2口未动作。
想请教一下用过的大侠:
1。如何正确使用EBI的8bit和16bit模式?
2.如果EBI总线上接了多个器件,且想用P2当作不同的地址选择线,改如何操作多个EBI上的器件呢?如何定义各自的地址?
outpb((uint8_t *)DRVEBI_BASE_ADDR+DAC1Addr,data ); //DAC1Addr=0xFEFF P2.0=CS 这样可以指定P2.0当作CS的器件吗? |
|