?? main(能讀取m25p80的電子簽名).c
字號:
//P4.7---SDA
//P4.6---SCL
#include "msp430x43x.h"
#define V80 0X01;
#define HOLD 0X02;
#define W 0X04;
#define STE 0X01;
#define SI 0X02;
#define SO 0X04;
#define UCLK 0X08;
#define Ram_addr 0x250;
#define uchar unsigned char
#define uint unsigned int
void SpiWrite(char *Bufer,int cnt);
void SpiRead(int cnt);
void ReadID(void);
uchar RXBufer[5];
void SpiWrite(char *Bufer,int cnt){ //Bufer是寫入的字符串,cnt是字符串的長度
char data;
int i,j;
for(j=0;j<cnt;j++){
data=Bufer[j];
for(i=0;i<8;i++){
P3OUT &= ~UCLK; //SCK下降沿
if(data&BIT7){ //高位是1;
P3OUT |= SI;
} //主機輸出1
else{
P3OUT &= ~SI;
} //主機輸出0
P3OUT |= UCLK; //SCK上升沿
data<<=1;
}
}
}
void SpiRead(int cnt){ //cnt是讀入數據的個數,讀入數據在RxBufrer[]中
char data;
int i,j;
for(j=0;j<cnt;j++){
for(i=0;i<8;i++){
P3OUT &= ~UCLK; //SCK下降沿
if(P3IN&BIT2){
data<<=1;
data =data+BIT0;
}
else{
data<<=1;
}
P3OUT |= UCLK; //SCK上升沿
}
RXBufer[j] = data;
}
}
void ReadID(void){ //read device’S ID;
//int i;
char command[4]={0xAB,0x00,0x00,0x01}; //0xAB是sst25P80的讀ID指令
P3OUT &= ~STE; //選中芯片
SpiWrite(command,4); //給flash芯片發指令
SpiRead(1); //讀取5個字符
P3OUT |= STE; //CE拉高
}
void main(void)
{
P1DIR |= 0x07;
P3DIR |= 0x0B;
P3DIR &= ~SO; //430的SO腳置為輸入模式
P1OUT |= V80; //芯片供電
P3OUT &= ~STE; //選中芯片
P1OUT |= W; //芯片非寫保護
P1OUT |= HOLD; //芯片非hold模式
P3OUT |= UCLK; //時鐘線先置高
//P4OUT |= 0x08;
WDTCTL = WDTHOLD+WDTPW;
ReadID();
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -