📄 at45db041.c
字号:
#include <msp430x14x.h>
//*********************************************************************
//本实验是将TAB中的数据写入AT45DB041中
//在将数据从AT45DB041读出,
//并将数据放入270为首地址的RAM中
//*******************************************************************
#define CS 0x40
#define SCK 0x10
#define SI 0x08
#define SO 0x04
#define WP 0x02
#define RESET 0x20
int word;
int cmd_word;
int R_word;
int tab[16]={0x12,0x34,0x56,0x78,0x9A,0xBC,0xDF,0x00};
int *Ram_addr;
int *Buff_addr;
void Send_Byte(void)
{
int i;
int Tamp;
for (i=0;i<8;i++)
{
P6OUT&=~SCK;
Tamp = word;
Tamp &= 0x80;
if(!Tamp)
P6OUT&=~SI;
else
P6OUT |= SI;
P6OUT |= SCK;
word = word << 1;
}
}
void Send_Start(void)
{
P6DIR |= SI+SCK;
P6OUT |= SCK;
word = cmd_word;
Send_Byte();
}
void Stop(void)
{
P6DIR &= 0X00;
P6DIR |= CS+SCK+RESET+WP;
P6OUT |= CS+SCK+RESET+WP;
}
void Flash_B_Write(void)
{
int j;
P6DIR |= CS;
P6OUT&=~CS;
cmd_word = 0x84;
Send_Start();
word = 0x00;
Send_Byte();
word = 0x00;
Send_Byte();
word = 0x1A;
Send_Byte();
for(j=0;j<16;j++)
{
word = tab[j];
Send_Byte();
}
Buff_addr = (int *)0x1A;
Stop();
}
void Receive_Byte(void)
{
int i;
P6DIR |= SCK;
P6DIR&=~SO;
R_word = 0x00;
P6OUT&=~CS;
for(i=0;i<8;i++)
{
P6OUT |= SCK;
P6OUT&=~SCK;
if(P6IN & SO)
R_word |= 0x01;
else
R_word &= 0xFE;
P6OUT |= SCK;
R_word = R_word << 1;
}
R_word = R_word >> 1;
}
void Flash_B_Read(void)
{
int j;
P6DIR |= CS;//CS out
P6OUT&=~CS;
cmd_word = 0x54;
Send_Start();
word = 0x00;
Send_Byte();
word = 0x00;
Send_Byte();
word = 0x1A;
Send_Byte();
word = 0xff;
Send_Byte();
for(j=0;j<16;j++)
{
Receive_Byte();
*Ram_addr++ = R_word;
}
Stop();
}
void main(void)
{
while(1)
{
int m = 0x7fff;
WDTCTL = WDTPW + WDTHOLD;
P6DIR &= 0X00;
P6SEL &= 0X00;
P6DIR |= CS+SCK+RESET+WP;
P6OUT |= CS+SCK+RESET+WP;
Flash_B_Write();
while(m-- > 0);
Ram_addr = (int *)0x270;
Flash_B_Read();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -