📄 spi.lst
字号:
C51 COMPILER V7.50 SPI 06/22/2006 09:45:47 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SPI
OBJECT MODULE PLACED IN .\myproject\SPI.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SPI.C LARGE OPTIMIZE(5,SPEED) BROWSE DEBUG OBJECTEXTEND OBJECT(.\myproject\
-SPI.obj)
line level source
1 /**************************************************************
2 Copyright (C), 2002-2030, ZhongXing Information Tech. Co., Ltd.
3 文件名 : SPI.c
4
5 作 者 : Lv Yanfei 版本:V1.00.00 完成日期:2006-04-17
6
7 描 述 : 本模块描述了IO脚模拟SPI接口与NX25P40通信的所有函数
8 引脚接口如下:
9 P3.4 ---- S0
10 P3.5 ---- SI
11 P3.6 ---- SCK
12 PA6 ---- CS
13 ***************************************************************/
14
15 #define SPI_GLOBAL
16 #include "config.h"
17
18
19 void SPI_SendChar(INT8U ch)
20 {
21 1 INT8U data i=8;
22 1
23 1 while(i--)
24 1 {
25 2 SCK = 0;
26 2 if((ch & 0x80) == 0x80) SI = 1;
27 2 else SI = 0;
28 2 SCK = 1;
29 2 ch <<= 1;
30 2 }
31 1 }
32
33 INT8U SPI_ReadChar(void)
34 {
35 1 INT8U data i=8, ch=0;
36 1
37 1 while(i--)
38 1 {
39 2 ch <<= 1;
40 2 SCK = 1;
41 2 SCK = 0;
42 2
43 2 if(SO == 1) ch |= 0x01;
44 2 else ch &= 0xFE;
45 2 }
46 1 SCK = 1;
47 1
48 1 return ch;
49 1 }
50 ////////////////////////////////////////////////////////////////
51 #ifdef SPI_ENABLEPROGRAM
52 INT8U SPI_ReadStatus(void)
53 {
54 1 INT8U data ch;
C51 COMPILER V7.50 SPI 06/22/2006 09:45:47 PAGE 2
55 1
56 1 CS0;
57 1 SPI_SendChar(RDSR_INST);
58 1 JREAD_STATUS0:
59 1 ch = SPI_ReadChar();
60 1 if((ch & 0x01) == 1) goto JREAD_STATUS0;
61 1 CS1;
62 1
63 1 return ch;
64 1 }
65
66 void SPI_EnPro(void)
67 {
68 1 CS0;
69 1 SPI_SendChar(PREN_INST);
70 1 CS1;
71 1 }
72
73 void SPI_DisPro(void)
74 {
75 1 CS0;
76 1 SPI_SendChar(PRDI_INST);
77 1 CS1;
78 1 }
79
80 void SPI_EraseSector(INT8U sec)
81 {
82 1 SPI_EnPro();
83 1 CS0;
84 1 SPI_SendChar(SECTOR_ERASE);
85 1 SPI_SendChar(sec);
86 1 SPI_SendChar(0x00);
87 1 SPI_SendChar(0x00);
88 1 CS1;
89 1 SPI_ReadStatus();
90 1 SPI_DisPro();
91 1 }
92 /*******************************************************************************
93 程序名: SPI_EraseBulk
94 说 明: 擦除所有扇区
95 ********************************************************************************/
96 void SPI_EraseBulk(void)
97 {
98 1 INT8U i;
99 1
100 1 for(i=0; i<8; i++)
101 1 {
102 2 SPI_EraseSector(i);
103 2 delay_10ms();
104 2 }
105 1 }
106 /*******************************************************************************
107 程序名: SPI_Program
108 说 明: 从地址addr开始,连续写入len个字节,数据来源是ptr指向的内存,
109 ********************************************************************************/
110 void SPI_Program(INT32U addr, INT8U len, INT8U *ptr)
111 {
112 1 INT8U i, addrc, addrh, addrl;
113 1
114 1 SPI_EnPro();
115 1 addrl = (INT8U)addr;
116 1 addr >>= 8;
C51 COMPILER V7.50 SPI 06/22/2006 09:45:47 PAGE 3
117 1 addrh = (INT8U)addr;
118 1 addr >>= 8;
119 1 addrc = (INT8U)addr;
120 1 CS0;
121 1 SPI_SendChar(PROGRAM_INST);
122 1 SPI_SendChar(addrc);
123 1 SPI_SendChar(addrh);
124 1 SPI_SendChar(addrl);
125 1 for(i=0; i<len; i++)
126 1 {
127 2 SPI_SendChar(*ptr++);
128 2 }
129 1 CS1;
130 1 SPI_ReadStatus();
131 1 SPI_DisPro();
132 1 }
133 #endif
134 /////////////////////////////////////////////////////////////////////////
135 /*******************************************************************************
136 程序名: SPI_Read
137 说 明: 从地址addr开始,连续读取len个字节,保存到ptr指向的内存,
138 y_n_bit 指示是否将读取的数据反显(1->0 0->1)
139 ********************************************************************************/
140 void SPI_Read(INT32U addr, INT8U len, INT8U *ptr, INT8U y_n_bit)
141 {
142 1 INT8U i, addrc, addrh, addrl;
143 1 INT8U *p;
144 1
145 1 p = ptr;
146 1 addrl = (INT8U)addr;
147 1 addr >>= 8;
148 1 addrh = (INT8U)addr;
149 1 addr >>= 8;
150 1 addrc = (INT8U)addr;
151 1
152 1 CS0;
153 1 SPI_SendChar(READ_INST);
154 1 SPI_SendChar(addrc);
155 1 SPI_SendChar(addrh);
156 1 SPI_SendChar(addrl);
157 1 if(y_n_bit == 1)
158 1 {
159 2 for(i=0; i<len; i++)
160 2 {
161 3 *p++ = SPI_ReadChar();
162 3 }
163 2 }
164 1 else
165 1 {
166 2 for(i=0; i<len; i++)
167 2 {
168 3 *p++ = ~(SPI_ReadChar());
169 3 }
170 2 }
171 1 CS1;
172 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 627 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 22
C51 COMPILER V7.50 SPI 06/22/2006 09:45:47 PAGE 4
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
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 + -