关于SPI口和AT45DB081连接的问题![转贴] - cpubbs虚拟仪器论坛 - cpubbs论坛免费虚拟仪器博客 labview虚拟仪器讨论区 - cpubbs论坛 虚拟仪器论坛|labview论坛|labwindows论坛|vi|cvi|数据采集卡|入门教程|初学|软件下载|虚拟仪器免费博客|虚拟仪器电子商务|虚拟仪器商城|虚拟仪器人才中心|图形化单片机编程cpuview|虚拟仪器在线商城 - Powered by X-Space
cpubbs论坛,专业的labview,labwindows,虚拟仪器数据采集卡交流论坛,免费博客,人才中心,电子商贸,欢迎您的光临!

关于SPI口和AT45DB081连接的问题![转贴]

上一篇 / 下一篇  2008-02-03 22:17:36 / 个人分类:转载类

转贴自:http://bbs.21ic.com/club/bbs/list.asp?boardid=39&t=1461844&tp=%u5173%u4E8ESPI%u53E3%u548CAT45DB081%u8FDE%u63A5%u7684%u95EE%u9898%uFF01

 

放一段程序吧。读写没优化过,但保证能用


INT8U   AT45DBBuf[528];
static  OS_EVENT* AT45DBSem;

void AT45DBInit(void)
{
#if OS_CRITICAL_METHOD == 3
  OS_CPU_SR  cpu_sr;
#endif

  AT45DBSem = OSSemCreate(1);
  OS_ENTER_CRITICAL();
  PCONP   |= 0x00000100;
  PINSEL0 &= 0xFFFF00FF;
  PINSEL0 |= 0x00005500;
  IO0DIR  |= AT45DB_CS;
  IO0SET   = AT45DB_CS;
  OS_EXIT_CRITICAL();
}

void AT45DBRead(INT16U u16_page)
{
#if OS_CRITICAL_METHOD == 3
  OS_CPU_SR  cpu_sr;
#endif
  INT16U u16_cnt;
  INT8U  u8_err;

  OSSemPend(AT45DBSem,0,&u8_err);
  OS_ENTER_CRITICAL();
  S0PCR  = 0x38;
  S0PCCR = FPCLK/2000000*2;
  
  IO0CLR = AT45DB_CS;
  S0PDR  = 0x52;
  while(0 == (S0PSR&0x80));
  S0PDR = (INT8U)(u16_page>>6);
  while(0 == (S0PSR&0x80));
  S0PDR = ((INT8U)(u16_page))<<2;
  while(0 == (S0PSR&0x80));
  S0PDR = 0x00;
  while(0 == (S0PSR&0x80));
  
  S0PDR = 0x00;
  while(0 == (S0PSR&0x80));
  S0PDR = 0x00;
  while(0 == (S0PSR&0x80));
  S0PDR = 0x00;
  while(0 == (S0PSR&0x80));
  S0PDR = 0x00;
  while(0 == (S0PSR&0x80));
  
  for(u16_cnt=0;u16_cnt<528;u16_cnt++)
  {
    S0PDR = 0x00;
    while(0 == (S0PSR&0x80));
    AT45DBBuf[u16_cnt] = S0PDR;
  }
  IO0SET = AT45DB_CS;
  
  OS_EXIT_CRITICAL();
  OSSemPost(AT45DBSem);
}

void AT45DBWrite(INT16U u16_page)
{
#if OS_CRITICAL_METHOD == 3
  OS_CPU_SR  cpu_sr;
#endif
  INT16U u16_cnt;
  INT8U  u8_err;
  
  OSSemPend(AT45DBSem,0,&u8_err);
  OS_ENTER_CRITICAL();
  S0PCR  = 0x38;
  S0PCCR = FPCLK/2000000*2;
  IO0CLR = AT45DB_CS;
  
  S0PDR = 0x82;
  while(0 == (S0PSR&0x80));
  S0PDR = (INT8U)(u16_page>>6);
  while(0 == (S0PSR&0x80));
  S0PDR = ( (INT8U)(u16_page))<<2;
  while(0 == (S0PSR&0x80));
  S0PDR = 0x00;
  while(0 == (S0PSR&0x80));
    
  for(u16_cnt=0;u16_cnt<528;u16_cnt++)
  {
    S0PDR = AT45DBBuf[u16_cnt];
    while(0 == (S0PSR&0x80));
  }
  
  IO0SET = AT45DB_CS;
  OS_EXIT_CRITICAL();
  
  OSTimeDly(20);
  OSSemPost(AT45DBSem);   
}

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2024-05-12  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 33687572
  • 日志数: 168
  • 图片数: 6
  • 影音数: 5
  • 商品数: 4
  • 文件数: 105
  • 建立时间: 2006-11-02
  • 更新时间: 2016-04-08

RSS订阅

Open Toolbar