-
#include
#define CE_H P5OUT |=BIT3
#define CE_L P5OUT &=~BIT3
unsigned char temp;
void flash_inint(void)
{
P5DIR |= BIT3; // CE
P2SEL |= BIT0|BIT1; // BIT0 SI
P2DIR |= BIT0; // SO
P1SEL |= BIT7 ;// sck
P1DIR |= BIT7;
UCB0CTLW0 |= UCSWRST; //启用复位
UCB0CTLW0 |= UCMST | UCSYNC |UCCKPL ;// //分别为 主模式;同步模式;时钟极性选择 3线模式
UCB0CTLW0 |= UCMSB;
//UCB0CTLW0 |= UCMODE0;
UCB0CTLW0 |= UCSSEL_1; // 选择ACLK时钟
UCB0BRW_L = 0x02; // 波特率控制位;fBitClock = fBRCLK/(UCBRx+1) ;
UCB0BRW_H = 0;
//UCB0MCTLW = 0; //
UCB0CTLW0 &= ~UCSWRST; //禁止复位
UCB0IE |=UCRXIE;
}
//*******************************
void ID_date()// 这种情况下输出的波形和数据是正确的
{
unsigned char i;
for(i=0;i
-
但是我给他__delay_cycles(24); 之后时间足够用了 CE这个管脚还是不能为高,我用示波器测试 单片机的输 si sck 管脚有数据输出 flash芯片的 so 管脚输出的波形 单片机无法识别。
-
#include
#include "flash.h"
//unsigned char num[]={0,0,0};
//unsigned char i;
//******F LASH inint函数 ******************************
void flash_inint(void)
{
P5DIR |= BIT3;// CE使能管脚
P2SEL |= BIT0|BIT1;
P2DIR |=BIT1;
P1SEL |= BIT7 ;
P1DIR |=BIT7;
UCB0CTLW0 |= UCSWRST; //启用复位
UCB0CTLW0 |= UCMST | UCSYNC | UCMSB| UCCKPL;// |UCCKPL //分别为 主模式;同步模式;时钟极性选择 0是低 1是高;
//UCB0CTLW0 |= UCSTEM ; // | UCMODE1 // 选择输出是 MSB还是LSB
//UCBOSTATW_SPI |= UCFE; |UCBUSY;
UCB0CTLW0 |= UCSSEL_1; // 选择ACLK时钟
UCB0BRW_L = 0x02; // 波特率控制位;fBitClock = fBRCLK/(UCBRx+1) ;
UCB0BRW_H = 0;
//UCB0MCTLW = 0; //
UCB0CTLW0 &= ~UCSWRST; //禁止复位
UCB0IE |=UCRXIE;
//UCB0IE |=UCTXIE;
}
//*************写使能函数**********************
void wren_date(void)
{
CE_L;
UCB0TXBUF=0X06;
CE_H;
}
//**************读取状态寄存器**********************************
void RDSR_date(void)
{
CE_L;
UCB0TXBUF=0X05;
while (!(UCB0IFG & UCTXIFG)) ;
temp=UCB0RXBUF;
/*for(i=0;i>8);
UCB0TXBUF=(addess & 0xFF);
CE_H;
}
//****************全片擦除******************************
void ERASE_ALL(void)
{
wren_date();
UCB0TXBUF=0X60;
delayms(4);
//CE_H;
}
//*********读芯片id**********************************
void ID_date()
{
//CE_H;
CE_L;
UCB0TXBUF=0X9F;
//__delay_cycles(24);
//
}
//******************读取RDID*************************************
void RDID_date(void)
{
CE_L;
UCB0TXBUF=0x90;
UCB0TXBUF=0x00;
UCB0TXBUF=0x00;
UCB0TXBUF=0x00;
__delay_cycles(24);
//CE_H;
}
//*******************测试函数****************************
void ceshi(void)
{
CE_L;
UCB0TXBUF=0X05;
}
//****************中断服务函数***************************
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_B0_VECTOR
__interrupt void USCI_B0_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_B0_VECTOR))) USCI_B0_ISR (void)
#else
#error Compiler not supported!
#endif
{
switch (__even_in_range(UCB0IV, 4))
{
case USCI_NONE: break; // No interrupt
case USCI_SPI_UCRXIFG: // RXIFG
while (!(UCA1IFG & UCTXIFG)) ;
UCA1TXBUF= UCB0RXBUF;
__delay_cycles (2); // USCI_A0 TX buffer ready?
break;
case USCI_SPI_UCTXIFG: break; // TXIFG
default: break;
}
}
我又擦除过哦 现在是这样 CE这个管教必须一直为低才能读出来 这是为什么?
-
同求啊!!!
-
你好 :
你的问题解决了吗? 我现在也遇到了同样的问题!!!!
-
你好版主:
我现在用SST25VF040B这个芯片 有个问题想麻烦你一下:
能正确读取出芯片的id 但是不能对芯片读写 这是什么问题 我用的单片机是msp430带 SPI 接口。
谢谢