论坛» 嵌入式开发» MCU

请教:寄存器操作问题

菜鸟
2008-07-24 11:12 1楼

我在HEW中写了一个简单的控制IO口输出高低电平的试验,在调试的时候,发现变量可以正常变化,寄存器却一直未变。大家帮忙看看哪出问题了,先谢过了!

硬件环境: CPU:H8S2166 仿真器:E10A

新建工程的时候选择“Application”,配置选项如下:
CPU family:H8S,H8/300,Tool chain:Hitachi H8S,H8/300 Standard;
Toolchain version:6.1.3.0,CPU Series:2000,CPU Type:2168F;
Targets:H8S/2168F E10A-USB SYSTEM(CPU 2000);
其他的都是默认设置。

代码:
#define P2DDR (*(volatile unsigned long *)0xFFB1) /* P2DDR Address*/
#define P2DR (*(volatile unsigned long *)0xFFB3) /* P2DR Address*/
void main(void)
{
int i = 0;

P2DDR = 0x08;
while(1)
{
P2DR = 0x00;
i++;
if(i>100)
{
i = 0;
P2DR = 0x08;
}
}
}
我按照仿真器用户手册上的说明,连接仿真器后,Download .abs文件之后,就可以单步执行程序了。在执行过程中发现:变量i的值可以正确地变化,而寄存器的值却一直未变,板子上也没有什么反应。
是不是对寄存器还需要什么初始化操作,或者HEW还需要注意哪些设置?

菜鸟
2008-07-24 11:53 2楼

有2个错误:
1 H8S2166的P2口是个8位口,所以在定义时只能用*(unsigned char *),而不是*(unsigned long*)。否则当你操作时,会影响到别的SFR。
2 使用P2口作为输出口时,还有2个条件,一个是MCU的运行模式:扩展模式还是单芯片模式。我估计你使用的是单芯片模式。如果在单芯片模式下,如果想P2输出,还要设定PWOERB寄存器。这个寄存器默认值为0(输入),必须设定为10。

菜鸟
2008-07-24 14:59 3楼

多谢了,马上试试看!

菜鸟
2008-07-24 15:16 4楼
我按照你说的办法试了试,发现在运行过程中,PWOERB的值可以改变为10,但是P2DDR和P2DR的值还是一直不变。是不是对端口操作前还得配置其它的寄存器?
菜鸟
2008-07-27 21:27 5楼
哪位xdjm给指点一下?
菜鸟
2008-07-28 10:22 6楼
去问了一下用过的同事,他们是这样回答的,请参考。

I/O寄存器的地址这样定义:

#define P2DDR(*(volatile unsigned long *)0xFFB1) /* P2DDR Address*/

#define P2DR(*(volatile unsigned long *)0xFFB3) /* P2DR Address*/

是不对的,应该是:

#define P2DDR(*(volatile unsigned char *)0xFFFFB1) /* P2DDR Address*/

#define P2DR (*(volatile unsigned char *)0xFFFFB3) /* P2DR Address*/

菜鸟
2008-07-28 15:37 7楼
多谢 ammiezhang的帮助,我试过了,确实如你所说。现在寄存器可以正确变化了。不过现在还有其它的问题需要解决,不知能否给我 你同事的QQ之类的联系方式?不胜感激!
我的QQ:403173765
共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]