at45db041.c

来自「TI msp430 用c编写的AT45db041的驱动程序源码」· C语言 代码 · 共 136 行

C
136
字号
#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 + =
减小字号Ctrl + -
显示快捷键?