TI中文支持网
TI专业的中文技术问题搜集分享网站

【C6670】中断和Cache

A、芯片:DSP6670

B、硬件环境:自制开发板,仿真器是 xds560v2 

C、软件环境:CCS 5.3

问题1:

工程需要同时使用 Timer 和 GPIO 中断,在为 GPIO 分配中断向量时,发现中断向量4已经被使用,Timer 是否默认使用中断向量4

问题2:

为 DDR3开了16M 的 Non Cacheable 的存储区域,地址为0x9000 0000 ~ 0x90FF FFFF,也就是 Mar[144],在 main 函数调用 cache_disable 函数,

但是将一些不希望刷 cache 的变量放在该区域时,出现有些变量有效,另外一些变量却依然需要刷 cache 才有效,

请问这是什么原因,是否有配置上的遗漏?

感谢 TI 工程师给予解答。

Andy Yin1:

1. 裸机芯片起来后不会使用任意中断向量,除非可能是某种bootloader或者操作系统使用了默认的中断资源;

2 调用CACHE_disableCaching (Uint8 mar),或者调用CACHE_setMemRegionInfo (Uint8 mar, Uint8 pcx, Uint8 pfx)将cache及prefetch属性都关掉试试

Bear Melon:

回复 Andy Yin1:

问题反馈:

1. 在原有的工程增加了 Timer 后,原来在 GPIO 中断配置中的中断向量4就被报告出已被使用,原来一直可以使用。(使用了SYS/BIOS)

2. 因为希望 non cacheable 的内存区域是0x9000 0000 ~ 0x90FF FFFF,所以分别尝试调用

CACHE_disableCaching (144),以及

CACHE_setMemRegionInfo (144, 0, 0),

但放进该区域的变量和指针依然没有收到预期的结果。

问题补充:

1. 除了 disable cache 以外,还需要做其他设置吗?

2. 使用 cache 和不使用 cache 的情况,时间上相差有多大?

3. 使用多核的情况下,一个变量在多个核中都需要更改,那么这个变量就必须刷 cache,那么除了上述将变量放进 non cacheable 的方法外,

还有没有其他方法来避免刷 cache 的动作?

谢谢 TI 工程师解答。

YUCHAO WANG:

回复 Bear Melon:

你好:

       关于cache,如果你把一个多核共享访问的变量放在cache使能的区域,那一致性维护就是没办法避免的事;使用cache只有在集中反复访问一小段数据时才能发挥最大效果,通常是在运算时有用。交互变量根本没必要cache。

赞(0)
未经允许不得转载:TI中文支持网 » 【C6670】中断和Cache
分享到: 更多 (0)