ant17 发表于 2009-1-13 16:50:29

AVR扩展外部RAM,如果只扩展256字节,ICC选项里应该怎样选?【恢复】

我现在用AT64,外部只扩展256字节用于控制外部芯片

在用ICC编程过程中,compiler potions中只能选择external 32k sram,或64k

不完全扩展外部ram,所以释放端口c所有引脚,设置为

 XMCRB = 0x07; 

我想问compiler potions中应该怎样设置,设为external 32k sram,或64k

会不会对程序有影响?

请马老师帮我看看,谢谢啦!

machao 发表于 2009-1-21 14:39:09

这个项目是你做,不是我做,我不知道你的系统到底要实现什么功能。



你问的东西我很难回答。别人也可能采用别的设计思路,如用I/O模拟并行扩展,这是硬件设计能力的体现。



学AVR、单片机不仅仅是程序设计,硬件设计能力非常重要,不能缺少,同软件相辅相成。

ant17 发表于 2009-1-21 11:16:48

好惭愧啊!硬件别人的设计



“在缺省条件下,使能外部存储器之后所有的端口C 引脚都被用作高位地址。如果系统不

需要全部的60KB 外部存储器地址空间,端口C 的某些引脚可以释放,用作普通的I/O,”



不完全扩展外部ram,所以释放端口c所有引脚,设置为  

 XMCRB = 0x07; 



那就是高八位都不用,那么这个时候应该怎样访问外部地址呢?



释放端口c所有引脚,那端口c所有引脚就可以用作他用吗?

疑问?麻烦请教马老师

machao 发表于 2009-1-20 14:48:20

要看你外部扩展接的片子接口类型,支持什么方式访问。



由于AVR的并行扩展方式是通常标准的并行扩展,A口地址数据复用,因此还需要573芯片等。高位PC为地址线,当然需要使用了。



你好象硬件基础没有。

ant17 发表于 2009-1-16 09:21:51

谢谢马老师!

我还有一个问题,我现在使用AT64控制winbond 的w9968cf芯片(图像压缩编码),它在datasheet中有这样的描述

The W9968CF internal registers occupy 256-byte microcontroller address space. A special base

address (BA) setup mechanism, described as followed, is designed for the microcontroller to configure

base address for the W9968CF internal register access:

1 assert hardware reset.

2 write the key, "!" "!" "W" "9" "9" "6" "7" "!" in ASCII code, to the port xx00H.

3 the port address, xx00H, then will be used as Base Address (BA) for the microcontroller

access.

我想问下第2点是什么意思,to the port xx00H.是向xx00H.这个地址连续写key吗?

因为我总线扩展的区域是0x1100-0x11FF ,我把xx00H设置为0x1100,我向0x1100H连续写了"!" "!" "W" "9" "9" "6" "7" "!",但是还是访问不到W9968CF internal registers

麻烦马老师帮我看下,谢谢了!

ant17 发表于 2009-1-20 09:38:32

马老师,我还有个问题

前面先引用下



我现在用AT64,外部只扩展256字节用于控制外部芯片 

在用ICC编程过程中,内部ram

不完全扩展外部ram,所以释放端口c所有引脚,设置为 

 XMCRB = 0x07;



那么,外部的0x1100-0x11FF 空间我该怎么访问呢?

我现在的设置是

#define CR1        (*(volatile unsigned char *)0x1100) 

但是我外扩的数据位只有8位,pcn高8位没用,硬件上没有连接,那么我能直接给CR1赋值吗?(我现在仿真是不行的)

是不是应该换个方式设置外部扩展的地址呢?

麻烦马老师看下

machao 发表于 2009-1-16 10:42:29

你的理解是对的,但不能访问我也没有办法,先要肯定硬件正确,AVR能写出数据。

machao 发表于 2009-1-15 13:18:28

自己写汇编当然可以。用C要注意,因为你如果定义的变量和数组大的话,编译器会使用外部RAM(因为你设置了外部RAM)。



建议你在ICC中不要设置使用外扩,这样编译器不会使用外部RAM空间。但注意:你自己代码的初始化时,要正确设置MCU寄存器,使用外部并行扩展。

ant17 发表于 2009-1-15 08:58:42

哦 

我是映射在32k区域

扩展的地址是0x1100-0x11FF

能不能把这个区域为专用的变量使用,不让其他变量访问

我现在的设置是

#define CR1        (*(volatile unsigned char *)0x1100)

.

.

.

#define CRn        (*(volatile unsigned char *)0x11FF)

请问马老师这样可以让CRn这些变量独享这些地址吗?(其他变量不会使用这些地址。)

machao 发表于 2009-1-14 12:33:24

看你的256个地址影射在RAM空间的那段区域了。在32K之内的,就使用32K,在32K之外的,应该使用64K

yxlsdbz 发表于 2011-10-9 11:15:16

mark
页: [1]
查看完整版本: AVR扩展外部RAM,如果只扩展256字节,ICC选项里应该怎样选?【恢复】