📄 test_spi_w25x.lst
字号:
C51 COMPILER V7.50 TEST_SPI_W25X 01/12/2009 23:18:14 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TEST_SPI_W25X
OBJECT MODULE PLACED IN Test_SPI_W25X.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil750\C51\BIN\C51.EXE Test_SPI_W25X.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #define uint8 unsigned char
3 #define uint16 unsigned int
4 #define uchar unsigned char
5 #define uint unsigned int
6 #define uint32 unsigned long
7
8 #include <SST89x5xxRD2.H>
9 #include <intrins.h>
10 #include <W25X_M.H>
11
12 void init_cpu(void);
13 void delay(uchar tt);
14 void trace(uchar *str,uchar len);
15 void test_page(uchar addr);
16 void read_page(uchar addr);
17 void Verify(uchar byte, uchar cor_byte);
18
19 uint8 Rxtemp;
20 bit MYTI;
21 uint8 tx_buff[16];
22 uint8 upper_128[16];
23 bit rx_ok;
24
25 void main(void)
26 { uint i;
27 1
28 1 init_cpu();
29 1 SPI_init();
30 1
31 1 tx_buff[0]='O';
32 1 tx_buff[1]='K';
33 1 trace(tx_buff,2);
34 1
35 1 for(;;)
36 1 { if(rx_ok == 1)
37 2 { rx_ok = 0;
38 3 switch(Rxtemp)
39 3 { case 0x01:
40 4 Rxtemp = 0;
41 4 tx_buff[0] = SPI_Read_ID1();
42 4 trace(tx_buff,1);
43 4 break;
44 4 case 0x02:
45 4 i = SPI_Read_ID2(0x00);
46 4 tx_buff[1] = (uchar)i;
47 4 tx_buff[0] = (uchar)(i>>8);
48 4 trace(tx_buff,2);
49 4 break;
50 4 case 0x03:
51 4 i = SPI_Read_ID3();
52 4 tx_buff[1] = (uchar)i;
53 4 tx_buff[0] = (uchar)(i>>8);
54 4 trace(tx_buff,3);
55 4 break;
C51 COMPILER V7.50 TEST_SPI_W25X 01/12/2009 23:18:14 PAGE 2
56 4 case 0x04:
57 4 tx_buff[0] = SPI_Read_Byte(0x00000000);
58 4 trace(tx_buff,1);
59 4 break;
60 4 case 0x05:
61 4 tx_buff[0] = 0x55;
62 4 SPI_Write_Byte(0x00000000,0xa5);
63 4 trace(tx_buff,1);
64 4 break;
65 4 case 0x06:
66 4 tx_buff[0] = SPI_Read_StatusReg();
67 4 trace(tx_buff,1);
68 4 break;
69 4 case 0x07:
70 4 SPI_Write_Enable();
71 4 break;
72 4 case 0x08:
73 4 upper_128[0]=0x01;upper_128[1]=0x02;upper_128[2]=0x03;upper_128[3]=0x04;
74 4 SPI_Write_nBytes(0x00000000,4);
75 4 break;
76 4 case 0x09:
77 4 SPI_Erase_Chip();
78 4 break;
79 4 case 0x0a:
80 4 SPI_Erase_Sector(0x000ff000);
81 4 while(1)
82 4 { tx_buff[0] = SPI_Read_StatusReg();
83 5 if(tx_buff[0] == 0)
84 5 { trace(tx_buff,1);
85 6 break;
86 6 }
87 5 }
88 4 break;
89 4 case 0x0b:
90 4 test_page(0x00);
91 4 break;
92 4 case 0x0c:
93 4 read_page(0x00);
94 4 break;
95 4 default:
96 4 break;
97 4 }
98 3 }
99 2 }
100 1 }
101
102 void init_cpu(void)
103 { TMOD = 0x21;
104 1 PCON = PCON | 0x80; //波特率加倍
105 1 SCON = 0x50; //异步、10位、波特率可变,无校验位
106 1 TH1 = 0xfd; //在11.0592M晶振下,波特率是9600,
107 1 TL1 = 0xfd;
108 1 TR1 = 1; //T1 timer run
109 1 ES = 1; //uart interrupt enable
110 1 EA = 1; //all interrupt enable
111 1 }
112
113 //串口中断程序
114 void UART_isr(void) interrupt 4
115 {
116 1 if(RI)
117 1 {
C51 COMPILER V7.50 TEST_SPI_W25X 01/12/2009 23:18:14 PAGE 3
118 2 RI = 0;
119 2 Rxtemp = SBUF; //接收
120 2 //SBUF = Rxtemp; //发送
121 2 rx_ok = 1;
122 2 return;
123 2 }
124 1 if(TI)
125 1 {
126 2 TI = 0;
127 2 MYTI = 1;
128 2 }
129 1 }
130 void test_page(uchar addr)
131 { uint i; uchar byte;
132 1 uint32 Dst_Addr;
133 1 W25X_CS = 0; // enable device
134 1 SPI_Write_Enable(); // set WEL
135 1 W25X_CS = 0;
136 1 Dst_Addr = (uint32)addr*256;
137 1 Dst_Addr = 0x0ff000;//(uint32)addr*256;
138 1 SPI_Send_Byte(W25X_PageProgram); // send Byte Program command
139 1 SPI_Send_Byte((uchar)((Dst_Addr & 0xFFFFFF) >> 16)); // send 3 address bytes
140 1 SPI_Send_Byte((uchar)((Dst_Addr & 0xFFFF) >> 8));
141 1 SPI_Send_Byte((uchar)(Dst_Addr & 0xFF));
142 1
143 1 for (i = 0; i < 256; i++) // send byte to be programmed
144 1 SPI_Send_Byte(i);
145 1 W25X_CS = 1;
146 1
147 1 delay_nms(5);
148 1
149 1 W25X_CS = 0;
150 1 while(1)
151 1 { tx_buff[0] = SPI_Read_StatusReg();
152 2 trace(tx_buff,1);
153 2 if(tx_buff[0] == 0) break;
154 2 }
155 1 Dst_Addr = 0x0ff000;
156 1 for (i = 0; i < 256; i++)
157 1 { byte = SPI_Read_Byte(Dst_Addr+i);
158 2 ES = 0;
159 2 SBUF = byte;
160 2 while (TI == 0);
161 2 TI = 0;
162 2 ES = 1;
163 2 }
164 1 W25X_CS = 1;
165 1 }
166 //=================================================================================================
167 void read_page(uchar addr)
168 { uint i;
169 1 uchar byte;
170 1 uint32 Dst_Addr;
171 1 Dst_Addr = addr*256;
172 1 Dst_Addr = 0x0ff000;
173 1 W25X_CS = 0;
174 1 for (i = 0; i < 256; i++)
175 1 { byte = SPI_Read_Byte(Dst_Addr+i);
176 2 ES = 0;
177 2 SBUF = byte;
178 2 while (TI == 0);
179 2 TI = 0;
C51 COMPILER V7.50 TEST_SPI_W25X 01/12/2009 23:18:14 PAGE 4
180 2 ES = 1;
181 2 }
182 1 W25X_CS = 1;
183 1 }
184 //=================================================================================================
185 void Verify(uchar byte, uchar cor_byte)
186 { if (byte != cor_byte)
187 1 { while(1);
188 2 //LED_Error = 0; /* display to view error on LED. */
189 2 }
190 1 }
191 //=================================================================================================
192 void myputchar(uchar c)
193 {
194 1 ES = 0;
195 1 SBUF = c;
196 1 while (TI == 0);
197 1 TI = 0;
198 1 ES = 1;
199 1 }
200 //=================================================================================================
201 void trace(uchar *str,uchar len)
202 { uint i;
203 1 for(i=0;i<len;i++) { myputchar(*str); str++; }
204 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 677 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 33 16
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -