亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? blspidrv.c

?? 本程序為ST公司開發(fā)的源代碼
?? C
字號:
/**************************(c) STMicroelectronics *****************************/
/*! \file
 *
 * CVS ID:   $Id: blspidrv.c,v 1.13 2007/09/03 14:21:59 marcucci Exp $
 * Author:   Maurizio Marcucci [MM] - STM
 * Date:     $Date: 2007/09/03 14:21:59 $
 * Revision: $Revision: 1.13 $
 *
 *  Project Scope:  CDM M8
 *
 *  Organisation:   Optical Media Storage B.U.
 *                  AGRATE ITALY Application Lab
 *
 *  Version Control:
 *    \source       main/spidrv.c
 *    \version      0.1
 *    \author       ST Agrate
 *    \date         00-00-00
 *
 *******************************************************************************
 *  \brief          Definition of Debug Procedures
 *
 *  \par            Change History:
 *
 * - PH040616       Fixed service command SVC_TTM_x_HZ
 * - PH040803       Changes:
 *                  - Reorganisation service mode variables
 *                  - BER measurement
 * - BB040923a      Code rom and ram size optimisation:
 *                  - only one type of seek function are compiled (MFS or SID)
 *
 ***************************************************
 *
 * STM CVS Log:
 *
 * $Log: blspidrv.c,v $ * Revision 1.13  2007/09/03 14:21:59  marcucci * Removed Compiler Warning *
 * Revision 1.12  2007/07/13 11:05:12  marcucci
 * Initilaize BSPI only when it is necessary
 *
 * Revision 1.11  2007/02/15 13:10:32  marcucci
 * Bootloader Optimization
 *
 * Revision 1.10  2006/10/05 14:21:56  belardi
 * Changed last for() with bl_delay()
 *
 * Revision 1.9  2006/09/18 09:55:20  belardi
 * Corrected CVS keyword usage
 *
 * Revision 1.8  2006/09/18 09:22:15  belardi
 * Added Log CVS keyword into file header
 *
 *
 ******************************************************************************/

#include "blgendef.h"
#include "blmsgdef.h"
#include "bldbgdef.h"
#include "hwreg.h"
#include "blscidef.h"



//extern uint32 Install_ISR(uint32 isr, uint32 vct);
//extern __irq void tim0_isr_hdl(void);
extern __irq void bl_bspi_glb_isr(void);
//void start_timer(uint32 TimeOut);
//uint32 check_timer(void);
//void stop_timer(void);

extern void configure_gpio(unsigned int port, unsigned int bit, unsigned int function);
//void pcintf(uint32 sf_download_status);
//extern void swi_isr(void);
//extern void MIRROR_JUMP(void);
//extern void CODE_JUMP(void);
//extern void Remap(void);
//void configure_gpio(unsigned int port, unsigned int bit, unsigned int function);
void bl_set_gpio(unsigned int port, unsigned int bit, unsigned int val);
//void remap(void);
//void InterruptEnable(void);
//void pcint_init(void);
void bl_bspi_init(BL_BSPI_STRUCT * bl_bspi_ptr);
void bl_bspi_send(uint32 data);
uint32 bl_bspi_rdid(BL_BSPI_STRUCT * bl_bspi_ptr);
uint32 bl_bspi_rdsr(BL_BSPI_STRUCT * bl_bspi_ptr);
uint32 bl_bspi_bulk_erase(BL_BSPI_STRUCT * bl_bspi_ptr);
uint32 bl_bspi_wren(BL_BSPI_STRUCT * bl_bspi_ptr);
void bl_bspi_pp(uint32 bl_page_addr, uint32 bl_byte_no, BL_BSPI_STRUCT * bl_bspi_ptr);
uint32 bl_sf_erase(BL_BSPI_STRUCT * bl_bspi_ptr);
uint32 bl_sf_pp(uint32 bl_page_addr, uint32 bl_byte_no, BL_BSPI_STRUCT * bl_bspi_ptr);
void bl_sf_read(uint32 bl_page_addr, uint32 bl_byte_no, BL_BSPI_STRUCT * bl_bspi_ptr);
void bl_start_timer(uint32 bl_TimeOut);
//uint32 CopyProgramToRam(void);
//void ClearProgramRam(void);
//void rccu_init(void);
//void timer0_init(void);
//void timer_test(void);
//void switch_off_pll(void);

//void enable_clock(void);

extern BL_STRUCT * bl;


__forceinline void bl_select_sf(void)
{
  PDB &= 0xFFFFFFFE;
}

__forceinline void bl_unselect_sf(void)
{
  PDB |= 1;
}

__forceinline void bl_delay(int32 i)
{
  for (; i > 0; i--) // BBTODO what happen if optimized?
    ;
}

void bl_bspi_init(BL_BSPI_STRUCT *bl_bspi_ptr)
{
  uint32 bl_isr_addr;
  //uint32 i;
  configure_gpio(BL_PORT_B, BL_GPIO_0, BL_GPIO_OUT_PP); // SFLASH_SS
  
  bl->error_reason = 0;
  //bl_sf_debug_idx = 0;

  #if 0
  for(i = 0; i < 256; i++)
  {
   bl->bspi_tx_buffer[i] = (i & 0xFF);
  }
  #endif

  bl_bspi_ptr->bspi_ovfl_cntr = 0;
  bl_bspi_ptr->bspi_berr_cntr = 0;

  bl_bspi_ptr->bspi_rx_bytes = 0;
  //set_gpio(PORT_B, GPIO_0, 1);
  bl_unselect_sf();
  BSPI_CSR1.field.bspe = 0;    // BSPI Disable
  //BSPI_CLK = 100;              // Fcpu/BSPI_CLK
  BSPI_CLK = 34;              // Fcpu/BSPI_CLK
  BSPI_CSR1.field.mstr = 1;    // BSPI is a master
  BSPI_CSR2.field.dfifo = 1;   //Clear FIFO
  BSPI_CSR3.field.mask_ss = 1; // Mask SS
  BSPI_CSR1.field.cpol = 0;
  BSPI_CSR1.field.cpha = 0;

  BSPI_CSR1.field.rfs = 16; // 16 Word FIFO
  BSPI_CSR1.field.wl = 0;   // 8 bit Data Added to re-write the reset value
  BSPI_CSR1.field.rie = 1;  // Receive FIFO Not Empty
  BSPI_CSR2.field.tfs = 16; // 16 Words Tx FIFO


  BSPI_CSR1.field.reie = 0; // Receive Error Interrupt Enable
  BSPI_CSR1.field.beie = 0;   // Bus Error Interrupt Disabled
  BSPI_CSR2.field.tie = 0;    // Transmit FIFO Interrupt Disabled , Added to re-write the Reset Value
  BSPI_CSR3.field.dma_en = 0; // DMA Disabled
  BSPI_CSR3.field.tburst_len = 0;
  BSPI_CSR3.field.rburst_len = 0;
  BSPI_CSR3.field.treq_len = 0;
  BSPI_CSR3.field.rreq_len = 0;




  bl_isr_addr = (uint32) bl_bspi_glb_isr;
  EIC_SIR_6.all =  (bl_isr_addr << 16) | 0x0F;
  EIC_IVR.all =  bl_isr_addr;
  EIC_IER |=  BL_BSPI_GLB_INT_MASK;

  //BSPI_CSR1.field.bspe = 1; // BSPI Enable
}


void bl_bspi_send(uint32 bl_data)
{
  while(1)
  {
   if(BSPI_CSR2.field.tfe)
   {
     BSPI_TXR = (bl_data << 8);
     break;
   }
  }

}


uint32 bl_bspi_rdid(BL_BSPI_STRUCT * bl_bspi_ptr)
{
  bl_bspi_ptr->bspi_rx_buffer_idx = 0;
  bl_select_sf();
  //set_gpio(PORT_B, GPIO_0, 0);
  bl_delay(100);
  bl_bspi_send(0xAB);
  bl_bspi_send(0x00); // 1st Dummy
  bl_bspi_send(0x00); // 2nd Dummy
  bl_bspi_send(0x00); // 3rd Dummy
  bl_bspi_send(0x00); // Read
  bl_delay(100);
  //while(bspi_rx_buffer_idx != 5);
  while (1)
  {
    if (bl_bspi_ptr->bspi_rx_buffer_idx == 5)
    {
      break;
    }
  }

  bl_unselect_sf();
  //set_gpio(PORT_B, GPIO_0, 1);
  return bl_bspi_ptr->bspi_rx_buffer[4];
}


uint32 bl_bspi_rdsr(BL_BSPI_STRUCT * bl_bspi_ptr)
{
  bl_bspi_ptr->bspi_rx_buffer_idx = 0;
  bl_select_sf();
  //set_gpio(PORT_B, GPIO_0, 0);
  bl_delay(100);
  bl_bspi_send(0x05);
  bl_bspi_send(0x00); // 1st Dummy
  bl_delay(100);
  //while(bspi_rx_buffer_idx != 2);

  while (1)
  {
    if (bl_bspi_ptr->bspi_rx_buffer_idx == 2)
    {
      break;
    }
  }
  bl_unselect_sf();
  //set_gpio(PORT_B, GPIO_0, 1);
  return bl_bspi_ptr->bspi_rx_buffer[1];
}

uint32 bl_bspi_wren(BL_BSPI_STRUCT * bl_bspi_ptr)
{
  bl_bspi_ptr->bspi_rx_buffer_idx = 0;
  bl_select_sf();
  //set_gpio(PORT_B, GPIO_0, 0);
  bl_delay(100);
  bl_bspi_send(0x06);
  bl_delay(100);
  //while(bspi_rx_buffer_idx != 1);
  while (1)
  {
    if (bl_bspi_ptr->bspi_rx_buffer_idx == 1)
    {
      break;
    }
  }

  bl_unselect_sf();
  //set_gpio(PORT_B, GPIO_0, 1);
  return bl_bspi_ptr->bspi_rx_buffer[0];
}


uint32 bl_bspi_bulk_erase(BL_BSPI_STRUCT * bl_bspi_ptr)
{
  bl_bspi_ptr->bspi_rx_buffer_idx = 0;
  bl_select_sf();
  //set_gpio(PORT_B, GPIO_0, 0);
  bl_delay(100);
  bl_bspi_send(0xC7);
  bl_delay(100);
  //while(bspi_rx_buffer_idx != 1);
  while (1)
  {
    if (bl_bspi_ptr->bspi_rx_buffer_idx == 1)
    {
      break;
    }
  }
  bl_unselect_sf();
  //set_gpio(PORT_B, GPIO_0, 1);
  return bl_bspi_ptr->bspi_rx_buffer[0];
}

void bl_bspi_pp(uint32 bl_page_addr, uint32 bl_byte_no, BL_BSPI_STRUCT * bl_bspi_ptr)
{
 uint32 i;
 uint32 bl_byte_0;
 uint32 bl_byte_1;
 uint32 bl_byte_2;

 bl_byte_0 = (bl_page_addr & 0xFF);
 bl_byte_1 = (bl_page_addr & 0xFF00) >> 8;
 bl_byte_2 = (bl_page_addr & 0xFF0000) >> 16;

  bl_bspi_ptr->bspi_rx_buffer_idx = 0;
  bl_select_sf();
  //set_gpio(PORT_B, GPIO_0, 0);
  bl_delay(100);
  bl_bspi_send(0x02);
  bl_bspi_send(bl_byte_2);
  bl_bspi_send(bl_byte_1);
  bl_bspi_send(bl_byte_0);
  bl_delay(10);
  for (i = 0; i < bl_byte_no; i++)
  {
    bl_bspi_send(bl_bspi_ptr->bspi_tx_buffer[i]);
  }
  bl_delay(100);
  //while(bspi_rx_buffer_idx != (byte_no + 4));
  while (1)
  {
    if (bl_bspi_ptr->bspi_rx_buffer_idx == (bl_byte_no + 4))
    {
      break;
    }
  }
  bl_unselect_sf();
  //set_gpio(PORT_B, GPIO_0, 1);
}


uint32 bl_sf_erase(BL_BSPI_STRUCT * bl_bspi_ptr)
{
 bl_bspi_wren(bl_bspi_ptr);

 bl_bspi_ptr->sf_sr = bl_bspi_rdsr(bl_bspi_ptr);

 //bl_sf_debug[bl_sf_debug_idx++] = bl_sf_sr | 0x80000000;
 //bl_sf_debug_idx &= 0x0F;

 if((bl_bspi_ptr->sf_sr & 0x02) == 0x02)
 {
  bl_bspi_bulk_erase(bl_bspi_ptr);
  while(1)
  {
   bl_bspi_ptr->sf_sr = bl_bspi_rdsr(bl_bspi_ptr);
   //bl_sf_debug[bl_sf_debug_idx++] = bl_sf_sr | 0x4000000;
   //bl_sf_debug_idx &= 0x0F;
   if((bl_bspi_ptr->sf_sr & 0x01) == 0x00)
   {
    return 1;
   }
  }
 }
 else
 {
   return 0;
 }

}



uint32 bl_sf_pp(uint32 bl_page_addr, uint32 bl_byte_no, BL_BSPI_STRUCT * bl_bspi_ptr)
{
 bl_bspi_wren(bl_bspi_ptr);

 bl_bspi_ptr->sf_sr = bl_bspi_rdsr(bl_bspi_ptr);

 //bl_sf_debug[bl_sf_debug_idx++] = bl_sf_sr | 0x80000000;
 //bl_sf_debug_idx &= 0x0F;

 if((bl_bspi_ptr->sf_sr & 0x02) == 0x02)
 {
  bl_bspi_pp(bl_page_addr, bl_byte_no, bl_bspi_ptr);
  while(1)
  {
   bl_bspi_ptr->sf_sr = bl_bspi_rdsr(bl_bspi_ptr);
   //bl_sf_debug[bl_sf_debug_idx++] = bl_sf_sr | 0x4000000;
   //bl_sf_debug_idx &= 0x0F;
   if((bl_bspi_ptr->sf_sr & 0x01) == 0x00)
   {
    return 1;
   }
  }
 }
 else
 {
   return 0;
 }

}



void bl_sf_read(uint32 bl_page_addr, uint32 bl_byte_no, BL_BSPI_STRUCT * bl_bspi_ptr)
{
 uint32 i;

 uint32 bl_byte_0;
 uint32 bl_byte_1;
 uint32 bl_byte_2;

 bl_byte_0 = (bl_page_addr & 0xFF);
 bl_byte_1 = (bl_page_addr & 0xFF00) >> 8;
 bl_byte_2 = (bl_page_addr & 0xFF0000) >> 16;

 bl_bspi_ptr->bspi_rx_buffer_idx = 0;
  bl_select_sf();
 //set_gpio(PORT_B, GPIO_0, 0);
 bl_delay(100);
 bl_bspi_send(0x03);
 bl_bspi_send(bl_byte_2);
 bl_bspi_send(bl_byte_1);
 bl_bspi_send(bl_byte_0);
 bl_delay(10);
 for(i= 0; i < bl_byte_no; i++)
 {
  bl_bspi_send(0x00);
 }
 bl_delay(100);
 //while(bspi_rx_buffer_idx != (byte_no + 4));
 while(1)
 {
  if(bl_bspi_ptr->bspi_rx_buffer_idx == (bl_byte_no + 4))
  {
   break;
  }
 }
 bl_unselect_sf();
 //set_gpio(PORT_B, GPIO_0, 1);
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美国产一区在线观看| 91在线porny国产在线看| 欧美一区二区三区免费大片| 视频在线观看国产精品| 日韩一二三区视频| 国产在线精品一区二区不卡了| 久久午夜羞羞影院免费观看| 成人性生交大片免费看中文| 亚洲品质自拍视频网站| 欧美日韩免费在线视频| 美女脱光内衣内裤视频久久影院| 久久综合久久久久88| 成人黄页毛片网站| 亚洲午夜久久久| 欧美成人性战久久| 成人少妇影院yyyy| 亚洲国产精品综合小说图片区| 日韩三级高清在线| 成年人网站91| 香蕉加勒比综合久久| 久久久久久久综合日本| 2022国产精品视频| av一二三不卡影片| 五月天亚洲精品| 国产日本欧美一区二区| 欧美少妇一区二区| 国产一区91精品张津瑜| 亚洲精品一二三区| 欧美α欧美αv大片| 91美女片黄在线观看| 精品一区精品二区高清| 亚洲色图欧美在线| 精品日产卡一卡二卡麻豆| 色屁屁一区二区| 久久99国产精品久久99| 亚洲六月丁香色婷婷综合久久| 欧美一级日韩不卡播放免费| 成人手机在线视频| 久久99国产精品久久| 一区二区三区在线视频播放 | 中文字幕日本乱码精品影院| 欧美午夜精品理论片a级按摩| 经典三级在线一区| 亚洲不卡一区二区三区| 国产精品蜜臀在线观看| 日韩免费看的电影| 欧美日韩电影在线播放| 久久在线免费观看| 欧美色精品在线视频| 99久久99久久免费精品蜜臀| 精品亚洲成a人在线观看| 一区二区在线观看视频在线观看| 久久久久久久久久久黄色| 91精品蜜臀在线一区尤物| 在线观看视频一区二区 | 成人av高清在线| 国内精品免费**视频| 日韩成人免费看| 午夜精品久久久久久久久| 亚洲免费成人av| 中文字幕一区在线观看| 久久精品人人爽人人爽| 欧美zozozo| 精品久久久久久久久久久久久久久 | 久久色.com| 日韩精品一区二区三区蜜臀| 欧美麻豆精品久久久久久| 91小宝寻花一区二区三区| 成人免费视频免费观看| 国产一区二区福利| 黑人巨大精品欧美一区| 久久91精品国产91久久小草| 蜜桃久久久久久| 久久精品99国产精品| 日本视频免费一区| 老司机午夜精品| 看片的网站亚洲| 玖玖九九国产精品| 韩国中文字幕2020精品| 国产一区美女在线| 国产很黄免费观看久久| 成人av网站大全| 色悠悠亚洲一区二区| 91影院在线观看| 欧美色综合网站| 91精品国产黑色紧身裤美女| 日韩午夜在线观看| 久久久精品黄色| 中文字幕在线免费不卡| 亚洲男同1069视频| 亚洲成人综合网站| 另类小说图片综合网| 国产精品88888| 99精品一区二区| 在线观看日韩av先锋影音电影院| 色综合一个色综合亚洲| 欧美日韩精品一区二区三区四区| 欧美久久久久免费| 精品国一区二区三区| 中文字幕巨乱亚洲| 一卡二卡欧美日韩| 麻豆国产欧美日韩综合精品二区 | 亚洲成av人影院| 奇米一区二区三区av| 国模套图日韩精品一区二区 | 日韩免费视频一区| 国产精品入口麻豆原神| 亚洲制服欧美中文字幕中文字幕| 日韩va欧美va亚洲va久久| 国产精品亚洲午夜一区二区三区| av成人老司机| 3d动漫精品啪啪| 国产欧美日韩三级| 亚洲午夜在线视频| 国产激情偷乱视频一区二区三区 | 成人一区二区视频| 欧美午夜精品一区| 国产欧美日韩三区| 日本欧美一区二区| 99国产精品久| 日韩免费福利电影在线观看| 亚洲男人天堂av| 国产自产高清不卡| 欧美性猛交xxxx乱大交退制版| 欧美大胆一级视频| 亚洲激情在线播放| 国产精品亚洲人在线观看| 欧美日韩在线观看一区二区| 国产视频一区不卡| 天堂av在线一区| 色综合天天综合| 精品国产乱码久久久久久闺蜜| 亚洲精品免费看| 国产成人免费视频精品含羞草妖精 | 欧美日本免费一区二区三区| 国产精品久久久久婷婷二区次| 日韩成人精品在线观看| 91年精品国产| 国产欧美精品一区二区色综合| 日韩av电影天堂| 欧美四级电影网| 亚洲桃色在线一区| 成人涩涩免费视频| 久久理论电影网| 麻豆免费看一区二区三区| 精品视频资源站| 亚洲图片欧美激情| 国产成人在线免费观看| 欧美岛国在线观看| 日韩激情在线观看| 欧美精品丝袜久久久中文字幕| 亚洲精品国产品国语在线app| 国产一区 二区| 精品久久久网站| 乱一区二区av| 日韩一区二区三区av| 日韩激情中文字幕| 欧美男同性恋视频网站| 性做久久久久久免费观看| 欧美在线视频全部完| 亚洲精品中文在线观看| 色诱亚洲精品久久久久久| 亚洲欧洲综合另类在线| 91麻豆精东视频| 亚洲欧美偷拍卡通变态| 成人国产免费视频| 国产精品欧美久久久久无广告| 国产福利一区二区三区| 国产视频亚洲色图| 成人国产在线观看| 亚洲欧美日韩电影| 欧美色爱综合网| 日本aⅴ免费视频一区二区三区| 欧美美女视频在线观看| 日本午夜精品视频在线观看 | 丰满白嫩尤物一区二区| 国产精品私房写真福利视频| 9色porny自拍视频一区二区| 亚洲视频每日更新| 欧美日韩一级片网站| 蜜臀av国产精品久久久久| 久久一留热品黄| 成人免费视频app| 亚洲精品五月天| 欧美美女激情18p| 久久99精品久久久久久动态图 | 欧美一级夜夜爽| 精品一区二区三区视频在线观看 | 日韩一二三区视频| 国产最新精品免费| 中文字幕在线观看不卡| 91网站黄www| 日韩在线a电影| 久久综合国产精品| 91在线porny国产在线看| 丝袜脚交一区二区| 久久综合色综合88| 色狠狠桃花综合| 麻豆久久久久久久| 综合久久一区二区三区|