首页 > 代码库 > Nios II 中的缓存和内存数据的读写
Nios II 中的缓存和内存数据的读写
nios 使用地址中31bit来表示访问是否bypass cache。
如果bit 31=0 表示不bypass cache,即使用cache里的数据;如果bit 31=1表示bypass cache,即直接使用mem中的数据。
如alt_remap_uncached函数
1 #ifdef NIOS2_MMU_PRESENT 2 /* Convert KERNEL region address to IO region address */ 3 #define BYPASS_DCACHE_MASK (0x1 << 29) 4 #else 5 /* Set bit 31 of address to bypass D-cache */ 6 #define BYPASS_DCACHE_MASK (0x1 << 31) 7 #endif 8 9 /*10 * Convert a pointer to a block of cached memory, into a block of11 * uncached memory.12 */13 14 volatile void* alt_remap_uncached (void* ptr, alt_u32 len)15 {16 alt_dcache_flush (ptr, len);17 return (volatile void*) (((alt_u32) ptr) | BYPASS_DCACHE_MASK);18 }
其中
1 #ifdef NIOS2_FLUSHDA_SUPPORTED 2 #define ALT_FLUSH_DATA(i) __asm__ volatile ("flushda (%0)" :: "r" (i)); 3 #else 4 #define ALT_FLUSH_DATA(i) __asm__ volatile ("flushd (%0)" :: "r" (i)); 5 #endif /* NIOS2_FLUSHDA_SUPPORTED */ 6 7 /* 8 * alt_dcache_flush() is called to flush the data cache for a memory 9 * region of length "len" bytes, starting at address "start".10 *11 * Any dirty lines in the data cache are written back to memory.12 */13 14 void alt_dcache_flush (void* start, alt_u32 len)15 {16 #if NIOS2_DCACHE_SIZE > 017 18 char* i;19 char* end; 20 21 /*22 * This is the most we would ever need to flush.23 *24 * SPR 196942, 2006.01.13: The cache flush loop below will use the25 * ‘flushda‘ instruction if its available; in that case each line26 * must be flushed individually, and thus ‘len‘ cannot be trimmed.27 */28 #ifndef NIOS2_FLUSHDA_SUPPORTED29 if (len > NIOS2_DCACHE_SIZE)30 {31 len = NIOS2_DCACHE_SIZE;32 }33 #endif34 35 end = ((char*) start) + len; 36 37 for (i = start; i < end; i+= NIOS2_DCACHE_LINE_SIZE)38 { 39 ALT_FLUSH_DATA(i); 40 }41 42 /* 43 * For an unaligned flush request, we‘ve got one more line left.44 * Note that this is dependent on NIOS2_DCACHE_LINE_SIZE to be a 45 * multiple of 2 (which it always is).46 */47 48 if (((alt_u32) start) & (NIOS2_DCACHE_LINE_SIZE - 1))49 {50 ALT_FLUSH_DATA(i);51 }52 53 #endif /* NIOS2_DCACHE_SIZE > 0 */54 }
Nios II 中的缓存和内存数据的读写
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。