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。