M051问题笔记,知道的答疑解惑,有问题的继续跟帖:)
现在发现以下几个问题:当EBI使能时,设置成16BIT模式时P2口是可以输出地址的,但设为8BIT模式时P2口未动作。但按手册上讲的应该和单片机一样开了8bit时只是数据是8bit的,地址应该也是16bit的啊,不知为何P2口无地址输出。
当EBI使能后,再开PWM1时,P2.1和P4.1都会输出PWM波形,按其说法应该是开了EBI以后PWM会映射到P4口的,不解。而且int32_t DrvGPIO_InitFunction(E_DRVGPIO_FUNC function)中设置PWM时的代码如下:依照代码来看没发现有判断EBI是否开启的地方,如果是PWM1的话确实是配置完了P2口又配置了P4口。 请知道的大侠解惑一下,谢谢。
/*---------------------------------------------------------------------------------------------------------*/
/* PWM */
/*---------------------------------------------------------------------------------------------------------*/
case E_FUNC_PWM01:
case E_FUNC_PWM23:
case E_FUNC_PWM45:
case E_FUNC_PWM67:
{
outpw(&SYS->P2_MFP, (inpw(&SYS->P2_MFP) | (0x3<<((function-E_FUNC_PWM01)*2)+8)) & ~(0x3<<((function-E_FUNC_PWM01)*2)));
if (function == E_FUNC_PWM01)
outpw(&SYS->P4_MFP, (inpw(&SYS->P4_MFP) & ~(0x3<<8)) | (0x3<<0));
else if (function == E_FUNC_PWM23)
outpw(&SYS->P4_MFP, (inpw(&SYS->P4_MFP) & ~(0x3<<10)) | (0x3<<2));
}break; 听新唐的说好像有复用的功能,好像地址和数据复用,不清楚没用过这些。 严重怀疑驱动库有问题,个人认为应该有如下判断:
/*---------------------------------------------------------------------------------------------------------*/
/* 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.7WR 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的器件吗? 不清楚 测试了m051的一些外设,觉得驱动库有瑕疵,例程有些错误。 就弄到AD
后面还没看了
这总线干什么的都不知道
汗
想法移植uCOS到新唐上~~~~ 不建议直接使用M051的库, 感觉问题很多, 我在移植FATFS的时候就吃亏了,都是些很明显的问题。
自己想实现的功能还是自己写函数比较好。 o0pingu0o 发表于 2010-12-18 08:27 static/image/common/back.gif
听新唐的说好像有复用的功能,好像地址和数据复用,不清楚没用过这些。
是的,他们家的芯片是地址与数据复用的,中间要加一个锁存器。
页:
[1]