⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.c

📁 MSP449学习板FLASH试验程序
💻 C
字号:
#include "msp430x44x.h"
//*********************************************************************
//
//                  MSP430F449
//             -----------------
//         /|\|              XIN|-  
//          | |                 |
//          --|RST          XOUT|-   ________
//            |                 |   |        |
//            |             P6.0|-->|   A    |
//            |             P6.1| . |   T    |
//            |             P6.2| . |   4    |
//            |             P6.3| . |   5    |
//            |             P6.4| . |   D    |
//            |             P6.5| . |   B    |
//            |             P6.6|-->|   0    |
//            |                 |   |   4    |        
//            |                 |   |   1    |
//                                  |________|
//
//  Lierda, Inc
//  Built with IAR Embedded Workbench Version: 3.40a
//  ID:  MSP430-TEST44X
//  REV: V2.0B
//  程序功能:副臼笛槭墙玊AB中的数据写入AT45DB041中,在将数据从AT45DB041读出,并将数据放入250为首地址的RAM中
//            通过本实验了解MSP430对外围扩展的用法,写入的数据是21,22,23,24,25,26。
//  硬件连接:必须将拨动开关P_MEMORY的 P1、P2、P3、P4、P5、P6、P7都拨到ON的位置。
//*******************************************************************
int word;
int cmd_word;
int R_word;
int tab[16]={0x21,0x22,0x23,0x24,0x25,0x26};
int *Ram_addr;
int *Buff_addr;
    
void Send_Byte(void)
{
  int i;
  int Tamp;
  for (i=0;i<8;i++)
  {
    P6OUT &= 0xDF;
    Tamp = word;
    Tamp &= 0x80;
    if(!Tamp)
      P6OUT &= 0xEF;
    else
      P6OUT |= 0x10;
   P6OUT |= 0x20;
   word = word << 1;
  } 
} 

void Send_Start(void)
{
  P6DIR |= 0X30;
  P6OUT |= 0X20;
  word = cmd_word;
  Send_Byte();
}

void Stop(void)
{
  P6DIR &= 0X00;
  P6DIR |= 0X63;
  P6OUT |= 0X63;
}

void Flash_B_Write(void)
{
  int j;
  P6DIR |= 0X40;
  P6OUT &= 0XBF;
  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 |= 0X20;
  P6DIR &= 0XF7;
  R_word = 0x00;
  P6OUT &= 0xBF;
  for(i=0;i<8;i++)
  {
     P6OUT &= 0xDF;
    P6OUT |= 0X20;
    if(P6IN & 0x08)
      R_word |= 0x01;
    else
      R_word &= 0xFE;
    P6OUT &= 0xDF;
    R_word = R_word << 1;
  }
  R_word = R_word >> 1;
}

void Flash_B_Read(void)
{
  int j;
  P6DIR |= 0X40;//CS out
  P6OUT &= 0XBF;
  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;
  FLL_CTL1 = SELM_A + FLL_DIV_8;
  P6DIR &= 0X00;
  P6SEL &= 0X00;
  P6DIR |= 0X63;
  P6OUT |= 0X63;
  Flash_B_Write();
  while(m-- > 0);
  Ram_addr = (int *)0x270;
  Flash_B_Read();
  _NOP();
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -