📄 spi2.lst
字号:
C51 COMPILER V7.10 SPI2 04/07/2008 22:02:47 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE SPI2
OBJECT MODULE PLACED IN .\output\spi2.obj
COMPILER INVOKED BY: C:\C51\BIN\C51.EXE source\spi2.c BROWSE DEBUG OBJECTEXTEND PRINT(.\list\spi2.lst) OBJECT(.\output\s
-pi2.obj)
line level source
1 #include <aduc834.h>
2 #include "..\headers\SPI.h"
3 sbit AT45_CS = P3^6 ; //定义控制口
4 #define AT45_Off AT45_CS = 1
5 #define AT45_On AT45_CS = 0
6
7 /********************************************
8 通过SPI写一个字节的操作
9 /********************************************/
10 Uchar Host_Writebyte(Uchar Send_Data)
11 {
12 1 SPIDAT=Send_Data;
13 1 while(!(SPICON&0x80));
14 1 return SPIDAT; // 通过读SPIDAT对ISPI位清零
15 1
16 1 }
17
18 /********************************************
19 读取FLASH寄存器的状态值
20 /*******************************************/
21 Uchar Status_Read(void)
22 {
23 1 AT45_On;//片选AT45DB011B
24 1 Host_Writebyte(AT45_Staus_RD);
25 1 Host_Writebyte(0xff);
26 1 AT45_Off; //结束
27 1 return SPIDAT;
28 1 }
29 /*******************************************
30 初始化函数 initiate function
31 /******************************************/
32 void SPI_Init(void)
33 {
34 1 SPICON=0x30;// SPI使能,主模式 ,fos/8
35 1 AT45_Off;//初始化高电平
36 1 /* IT0=1;
37 1 EX0=1;
38 1 EA=1;
39 1 cs=1; */
40 1 }
41 /******************************************
42 写缓冲函数 (Buffer Write)
43 /******************************************/
44 void Buffer_Write(Uint Buffer_Adderss,Uchar Send_Data)
45 {
46 1 Uchar Statu_Bit=0;
47 1 Uchar Flash_Busy = 1;
48 1 while(Flash_Busy)
49 1 {
50 2 Statu_Bit = Status_Read();
51 2 if((Statu_Bit & 0x80))
52 2 {
53 3 Flash_Busy = 0;
54 3 }
C51 COMPILER V7.10 SPI2 04/07/2008 22:02:47 PAGE 2
55 2 }
56 1 AT45_On; //select AT45
57 1 Host_Writebyte(AT45_Buf_WR); //buffer write opcode
58 1 Host_Writebyte(0x00);
59 1 Host_Writebyte((unsigned char)(Buffer_Adderss>>8));
60 1 Host_Writebyte((unsigned char)Buffer_Adderss);
61 1
62 1 /* for(i=0;i<length;i++)
63 1 {
64 1 Host_Writebyte(Read_pHeader[i]);
65 1 }
66 1 */
67 1
68 1 SPIDAT=Send_Data ;
69 1 while(!(SPICON&0x80)) ;
70 1 AT45_Off; //release AT45
71 1 }
72 /******************************************
73 读缓冲函数 (buffer read)
74 /******************************************/
75 Uchar Buffer_Read(Uint Buffer_Adderss)
76 {
77 1 Uint i=0;
78 1 Uchar Statu_Bit=0;
79 1
80 1 AT45_On; //select at45
81 1
82 1 Host_Writebyte(AT45_Buf_RD); //buffer read opcode
83 1 Host_Writebyte(0x00);
84 1 Host_Writebyte((unsigned char)(Buffer_Adderss>>8));
85 1 Host_Writebyte((unsigned char)Buffer_Adderss);
86 1 Host_Writebyte(0x00); //don't care bit
87 1
88 1 /* for(i=0;i<length;i++)
89 1 {
90 1 Read_pHeader[i]= Host_Readbyte();
91 1 }*/
92 1 SPIDAT=0XFF;
93 1 while(!(SPICON&0x80)) ;
94 1 return SPIDAT ;
95 1
96 1 AT45_Off; //release at45
97 1 }
98 /********************************************
99 缓冲向主存写函数
100 /*********************************************/
101 void MainMemory_Buffertransfer(Uint Page_Adderss)
102 {
103 1 Uchar Statu_Bit = 0;
104 1 Uchar Flash_Busy = 0;
105 1 while(!Flash_Busy)
106 1 {
107 2 Statu_Bit = Status_Read();
108 2 if((Statu_Bit & 0x80))
109 2 {
110 3 Flash_Busy = 1;
111 3 }
112 2 }
113 1 AT45_On ;
114 1 Host_Writebyte(0x83);
115 1 Host_Writebyte((Uchar)(Page_Adderss>>7));
116 1 Host_Writebyte((Uchar)(Page_Adderss<<1));
C51 COMPILER V7.10 SPI2 04/07/2008 22:02:47 PAGE 3
117 1 Host_Writebyte(0x00);
118 1 AT45_Off ;
119 1 }
120 /************************************************
121 通过缓存的写主存子程序
122 /***********************************************/
123 void Mainmemory_Write(Uint Page_Address,Uint Block_Address,Uchar Sent_Data)
124 {
125 1 while(!(Status_Read()&0x80)) ;
126 1 AT45_On;
127 1 Host_Writebyte(AT45_MainMem_ThrougBuf_WR);
128 1 Host_Writebyte((Uchar)(Page_Address>>7));
129 1 Host_Writebyte((Uchar)(Page_Address<<1)|(Uchar)(Block_Address>>8));
130 1 Host_Writebyte((Uchar)(Block_Address));
131 1 Host_Writebyte(Sent_Data) ;
132 1 AT45_Off;
133 1 }
134 /*************************************
135 读主存子程序
136 /***************************************/
137 Uchar Mainmemory_Read(Uint Page_Address,Uint Block_Address)
138
139 {
140 1 while(!(Status_Read()&0x80)) ;
141 1 AT45_On;
142 1 Host_Writebyte(AT45_MainMem_RD);
143 1 Host_Writebyte((Uchar)(Page_Address>>7));
144 1 Host_Writebyte((Uchar)(Page_Address<<1)|(Uchar)(Block_Address>>8));
145 1 Host_Writebyte((Uchar)Block_Address);
146 1 Host_Writebyte(0x00);
147 1 Host_Writebyte(0x00);
148 1 Host_Writebyte(0x00);
149 1 Host_Writebyte(0x00); //4byte don't 'care bits
150 1 Host_Writebyte(0xff); //送一字节的时间正好是传送读出一字节数据的时间
151 1 AT45_Off;
152 1 return SPIDAT;
153 1
154 1 }
155
156
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 312 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 9
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -