|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
麻烦达人介绍一下18片内SRAM测试方法 |
作者:ttjlc 栏目:单片机 |
我指的是SRAM的bank是如何操作的,SRAM如何分区? Access Bank?BSR?是如何一回事? 能提供资料亦可,先行谢过。 |
2楼: | >>参与讨论 |
作者: ttjlc 于 2004/7/14 9:14:00 发布:
自己顶 static volatile near unsigned int FSR0 @ 0xFE9; static volatile near unsigned int FSR1 @ 0xFE1; #define L_RAM_SIZE 0xEFF //RAM容量-1//18F6720;3840byte void ram_test(void); void ram_test(void) { FSR0 = L_RAM_SIZE; FSR1 = L_RAM_SIZE; while(FSR0) { POSTDEC0 = 0xFF; //*FSR0=0xFF;FSR0--; if(FSR0<0xEF4) { if(INDF1!=0xFF) //*FSR1 { goto RAMERR; } } FSR1--; } INDF0 = 0xFF; if(INDF0!=0xFF) { goto RAMERR; } FSR0 = L_RAM_SIZE; FSR1 = L_RAM_SIZE; while(FSR0) { POSTDEC0 = 0; //*FSR0=0xFF;FSR0--; if(FSR0<0xEF4) { if(INDF1!=0) //*FSR1 { goto RAMERR; } } FSR1--; } INDF0 = 0; if(INDF0!=0) { goto RAMERR; } RAMERR:NOP(); RAMOK:NOP(); if(FSR0!=0||FSR1!=0) { NOP(); //RAM 出错处理; } } /* #asm RAMSET: LFSR 0,L_RAM_SIZE ;FSR0=L_RAM_SIZE NEXT: MOVLW 0xFF MOVWF _POSTDEC0 ;//写入RAM,RAM地址递减1 MOVLW 0xF3 ;//仿真占用0EE4~0EEF CPFSLT _FSR0 ;//仿真占用0EE4~0EEF GOTO RESUME ;//仿真占用0EE4~0EEF MOVFF _FSR0L,_WREG //取RAM低位地址 MOVWF _FSR1L //赋RAM低位地址 MOVFF _FSR0H,_WREG //取RAM高位地址 MOVWF _FSR1H //赋RAM低位地址 INFSNZ _FSR1L //调整RAM低位地址 INCF _FSR1H //调整RAM高位地址 MOVLW 0xFF CPFSEQ _INDF1 ;//检验写入值 GOTO RAMERR RESUME: CLRF _WREG CPFSEQ _FSR0H ;//FSR0H==0,跳到判断FSR0L GOTO NEXT CLRF _WREG CPFSEQ _FSR0L ;//FSR0L==0,结束写循环NEXT GOTO NEXT MOVLW 0xFF MOVWF _INDF0 ;//写入最后一个RAM(地址0)值 CPFSEQ _INDF0 ;//检验最后写入值 CLRF _WREG GOTO RAMCLR RAMCLR: LFSR 0,L_RAM_SIZE;FSR0=L_RAM_SIZE CLRF _WREG LOOP: CLRF _POSTDEC0 ;//写入RAM,RAM地址递减1 MOVLW 0xF3 ;//仿真占用0EE4~0EEF CPFSLT _FSR0 ;//仿真占用0EE4~0EEF GOTO RESUME1 ;//仿真占用0EE4~0EEF & |
3楼: | >>参与讨论 |
作者: ttjlc 于 2004/7/14 9:49:00 发布:
sorry,c程序有错误,在测试 |
4楼: | >>参与讨论 |
作者: ttjlc 于 2004/7/14 10:58:00 发布:
if(FSR0<0xEF4)应为if(FSR1<0xEF4) |
5楼: | >>参与讨论 |
作者: ttjlc 于 2004/7/14 11:19:00 发布:
ram clear void ram_test(void) { FSR0 = L_RAM_SIZE; FSR1 = L_RAM_SIZE; while(FSR0) { POSTDEC0 = 0xFF; //*FSR0=0xFF;FSR0--; if(POSTDEC1!=0xFF) //*FSR1 { goto RAMERR; } } INDF0 = 0xFF; if(INDF0!=0xFF) { goto RAMERR; } FSR0 = L_RAM_SIZE; FSR1 = L_RAM_SIZE; while(FSR0) { POSTDEC0 = 0; //*FSR0=0xFF;FSR0--; if(POSTDEC1!=0) //*FSR1 { goto RAMERR; } } INDF0 = 0; if(INDF0!=0) { goto RAMERR; } RAMERR:NOP(); if(FSR0!=0||FSR1!=0) { NOP(); //RAM 出错处理; } } * - 本贴最后修改时间:2005-5-13 8:04:28 修改者:ttjlc |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |