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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? f34x_spi0_eeprom_polled_mode.c

?? 此spi程序原創來源于網絡
?? C
?? 第 1 頁 / 共 2 頁
字號:
// P2.2  -  Skipped,     Push-Pull,  Digital (LED D4 on Target Board)
// P2.3  -  Skipped,     Push-Pull,  Digital (LED D2 on Target Board)
// P2.4  -  Unassigned,  Open-Drain, Digital
// P2.5  -  Unassigned,  Open-Drain, Digital
// P2.6  -  Unassigned,  Open-Drain, Digital
// P2.7  -  Unassigned,  Open-Drain, Digital

// P3.0  -  Unassigned,  Open-Drain, Digital
// P3.1  -  Unassigned,  Open-Drain, Digital
// P3.2  -  Unassigned,  Open-Drain, Digital
// P3.3  -  Unassigned,  Open-Drain, Digital
// P3.4  -  Unassigned,  Open-Drain, Digital
// P3.5  -  Unassigned,  Open-Drain, Digital
// P3.6  -  Unassigned,  Open-Drain, Digital
// P3.7  -  Unassigned,  Open-Drain, Digital
//
//-----------------------------------------------------------------------------
void PORT_Init (void)
{
   P0MDOUT   = 0x1D;
   P2MDOUT   = 0x0C;
   P2SKIP    = 0x0F;
   XBR0      = 0x03;
   XBR1      = 0x40;
}

//-----------------------------------------------------------------------------
// TIMER2_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// Initializes Timer2 to be clocked by SYSCLK for use as a delay timer.
//
//-----------------------------------------------------------------------------
void TIMER2_Init (void)
{
   CKCON    |= 0x10;
}

//-----------------------------------------------------------------------------
// UART0_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// Configures the UART0 using Timer1, for <BAUDRATE> and 8-N-1. Once this is
// set up, the standard printf function can be used to output data.
//
//-----------------------------------------------------------------------------
void UART0_Init (void)
{
   SCON0 = 0x10;                       // SCON0: 8-bit variable bit rate
                                       //        level of STOP bit is ignored
                                       //        RX enabled
                                       //        ninth bits are zeros
                                       //        clear RI0 and TI0 bits
   if (SYSCLK/BAUDRATE/2/256 < 1)
   {
      TH1 = -(SYSCLK/BAUDRATE/2);
      CKCON &= ~0x0B;                  // T1M = 1; SCA1:0 = xx
      CKCON |=  0x08;
   } 
   else if (SYSCLK/BAUDRATE/2/256 < 4)
   {
      TH1 = -(SYSCLK/BAUDRATE/2/4);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01
      CKCON |=  0x09;
   }
   else if (SYSCLK/BAUDRATE/2/256 < 12)
   {
      TH1 = -(SYSCLK/BAUDRATE/2/12);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00
   } else
   {
      TH1 = -(SYSCLK/BAUDRATE/2/48);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10
      CKCON |=  0x02;
   }

   TL1 = TH1;                          // init Timer1
   TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
   TMOD |=  0x20;
   TR1 = 1;                            // START Timer1
   TI0 = 1;                            // Indicate TX0 ready
}

//-----------------------------------------------------------------------------
// SPI0_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// Configures SPI0 to use 4-wire Single-Master mode. The SPI timing is 
// configured for Mode 0,0 (data centered on first edge of clock phase and 
// SCK line low in idle state). The SPI clock is set to 2 MHz. The NSS pin 
// is set to 1.
//
//-----------------------------------------------------------------------------
void SPI0_Init()
{
   SPI0CFG   = 0x40;
   SPI0CN    = 0x0D;
   
   // The equation for SPI0CKR is (SYSCLK/(2*F_SCK_MAX))-1
   SPI0CKR   = (SYSCLK/(2*F_SCK_MAX)) - 1;
}

//-----------------------------------------------------------------------------
// Init_Device
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// Calls all device initialization functions.
//
//-----------------------------------------------------------------------------
void Init_Device (void)
{
   PCA0_Init ();
   OSCILLATOR_Init ();
   PORT_Init ();
   TIMER2_Init ();
   UART0_Init ();
   SPI0_Init ();
}

//-----------------------------------------------------------------------------
// Support Subroutines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Delay_us
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : 1. time_us - time delay in microseconds
//                   range: 1 to 255
//
// Creates a delay for the specified time (in microseconds) using TIMER2. The 
// time tolerance is approximately +/-50 ns (1/SYSCLK + function call time).
//
//-----------------------------------------------------------------------------
void Delay_us (BYTE time_us)
{
   TR2   = 0;                          // Stop timer
   TF2H  = 0;                          // Clear timer overflow flag
   TMR2  = -( (UINT)(SYSCLK/1000000) * (UINT)(time_us) );
   TR2   = 1;                          // Start timer
   while (!TF2H);                      // Wait till timer overflow occurs
   TR2   = 0;                          // Stop timer
}

//-----------------------------------------------------------------------------
// Delay_ms
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : 1. time_ms - time delay in milliseconds
//                   range: 1 to 255
//
// Creates a delay for the specified time (in milliseconds) using TIMER2. The 
// time tolerance is approximately +/-50 ns (1/SYSCLK + function call time).
//
//-----------------------------------------------------------------------------
void Delay_ms (BYTE time_ms)
{
   BYTE i;

   while(time_ms--)
      for(i = 0; i< 10; i++)           // 10 * 100 microsecond delay
         Delay_us (100);
}

//-----------------------------------------------------------------------------
// EEPROM_Write
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : 1. address - the destination EEPROM address.
//                   range: 0 to EEPROM_CAPACITY
//                2. value - the value to write.
//                   range: 0x00 to 0xFF
//
// Writes one byte to the specified address in the EEPROM. This function polls
// the EEPROM status register after the write operation, and returns only after
// the status register indicates that the write cycle is complete. This is to
// prevent from having to check the status register before a read operation.
//
//-----------------------------------------------------------------------------
void EEPROM_Write (UINT address, BYTE value)
{
   // Writing a byte to the EEPROM is a five-step operation.
   
   // Step1: Set the Write Enable Latch to 1
   NSSMD0   = 0;                       // Step1.1: Activate Slave Select
   SPI0DAT  = EEPROM_CMD_WREN;         // Step1.2: Send the WREN command
   while (!SPIF);                      // Step1.3: Wait for end of transfer
   SPIF     = 0;                       // Step1.4: Clear the SPI intr. flag
   NSSMD0   = 1;                       // Step1.5: Deactivate Slave Select
   Delay_us (1);                       // Step1.6: Wait for at least 
                                       //          T_NSS_DISABLE_MIN
   // Step2: Send the WRITE command
   NSSMD0   = 0;
   SPI0DAT  = EEPROM_CMD_WRITE;
   while (!SPIF);
   SPIF     = 0;
   
   // Step3: Send the EEPROM destination address (MSB first)
   SPI0DAT  = (BYTE)((address >> 8) & 0x00FF);
   while (!SPIF);
   SPIF     = 0;
   SPI0DAT  = (BYTE)(address & 0x00FF);
   while (!SPIF);
   SPIF     = 0;
   
   // Step4: Send the value to write
   SPI0DAT  = value;
   while (!SPIF);
   SPIF     = 0;
   NSSMD0   = 1;
   Delay_us (1);
   
   // Step5: Poll on the Write In Progress (WIP) bit in Read Status Register
   do
   {
      NSSMD0   = 0;                    // Activate Slave Select
      SPI0DAT  = EEPROM_CMD_RDSR;      // Send the Read Status Register command
      while (!SPIF);                   // Wait for the command to be sent out
      SPIF     = 0;
      SPI0DAT  = 0;                    // Dummy write to output serial clock
      while (!SPIF);                   // Wait for the register to be read
      SPIF     = 0;
      NSSMD0   = 1;                    // Deactivate Slave Select after read
      Delay_us (1);
   } while( (SPI0DAT & 0x01) == 0x01 );
}

//-----------------------------------------------------------------------------
// EEPROM_Read
//-----------------------------------------------------------------------------
//
// Return Value : The value that was read from the EEPROM
//                   range: 0x00 to 0xFF
// Parameters   : 1. address - the source EEPROM address.
//                   range: 0 to EEPROM_CAPACITY
//
// Reads one byte from the specified EEPROM address.
//
//-----------------------------------------------------------------------------
BYTE EEPROM_Read (UINT address)
{
   // Reading a byte from the EEPROM is a three-step operation.
   
   // Step1: Send the READ command
   NSSMD0   = 0;                       // Activate Slave Select
   SPI0DAT  = EEPROM_CMD_READ;
   while (!SPIF);
   SPIF     = 0;
   
   // Step2: Send the EEPROM source address (MSB first)
   SPI0DAT  = (BYTE)((address >> 8) & 0x00FF);
   while (!SPIF);
   SPIF     = 0;
   SPI0DAT  = (BYTE)(address & 0x00FF);
   while (!SPIF);
   SPIF     = 0;
   
   // Step3: Read the value returned
   SPI0DAT  = 0;                       // Dummy write to output serial clock
   while (!SPIF);                      // Wait for the value to be read
   SPIF     = 0;
   NSSMD0   = 1;                       // Deactivate Slave Select
   Delay_us (1);
   
   return SPI0DAT;
}

//-----------------------------------------------------------------------------
// End Of File
//-----------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀av性久久久久蜜臀aⅴ流畅| av网站免费线看精品| 国产美女精品在线| 日本高清成人免费播放| 欧美成人女星排行榜| 亚洲精品国产无套在线观| 黄色小说综合网站| 欧美午夜一区二区三区| 国产日韩精品久久久| 日韩av电影免费观看高清完整版 | 日韩黄色免费电影| 成人精品高清在线| 精品日韩欧美一区二区| 亚洲高清免费视频| 色综合天天综合网国产成人综合天| 91精品国产一区二区三区 | 国产精品激情偷乱一区二区∴| 婷婷开心激情综合| 欧美特级限制片免费在线观看| 国产丝袜美腿一区二区三区| 久国产精品韩国三级视频| 欧美日韩亚洲高清一区二区| 最新日韩av在线| 成人一区二区视频| 国产色一区二区| 激情深爱一区二区| 精品国产伦一区二区三区观看方式| 亚洲国产三级在线| 欧美天堂一区二区三区| 亚洲精品亚洲人成人网在线播放| 成人激情黄色小说| 国产精品乱人伦一区二区| 国产91综合网| 中文在线一区二区| 春色校园综合激情亚洲| 国产亚洲va综合人人澡精品| 国产一区视频网站| 国产日韩精品一区二区三区| 国产精品伊人色| 欧美国产丝袜视频| 国产 日韩 欧美大片| 国产精品嫩草久久久久| av电影天堂一区二区在线| 亚洲欧美日韩国产另类专区| 99视频精品免费视频| 亚洲色图一区二区| 欧美日精品一区视频| 天天综合色天天综合| 欧美成人一区二区三区| 国产精品一区二区久激情瑜伽| 国产精品污网站| 一本久道中文字幕精品亚洲嫩| 一区二区三区高清在线| 欧美高清hd18日本| 国产在线乱码一区二区三区| 欧美国产视频在线| 色婷婷国产精品| 日韩av电影天堂| 国产欧美日韩综合| 色天使色偷偷av一区二区| 偷拍与自拍一区| 久久综合99re88久久爱| 99精品视频在线免费观看| 亚洲高清免费观看高清完整版在线观看| 69堂亚洲精品首页| 国产精品99久久久久久宅男| 亚洲人成亚洲人成在线观看图片| 欧美视频一区二区| 国产精品一区二区男女羞羞无遮挡 | 国产精品国产三级国产普通话蜜臀| 99久久国产综合精品女不卡| 日韩中文字幕亚洲一区二区va在线| 精品国产一区二区三区久久久蜜月 | 国产乱子轮精品视频| 亚洲欧洲精品天堂一级| 欧美日韩精品一区视频| 国产精品一区不卡| 亚洲国产毛片aaaaa无费看 | 欧美一级片在线看| 成人国产精品免费观看| 秋霞影院一区二区| 亚洲天堂av老司机| 精品福利视频一区二区三区| 91福利在线播放| 国产成人免费在线| 午夜精品123| 国产精品色在线观看| 日韩亚洲欧美一区| 日本高清不卡一区| 床上的激情91.| 久久精品国产亚洲a| 亚洲一区二三区| 国产精品免费人成网站| 欧美电影免费观看高清完整版在线观看| 99re热视频这里只精品| 国产乱码精品一品二品| 丝袜亚洲另类欧美| 亚洲五月六月丁香激情| 日韩一区欧美一区| 国产日韩欧美精品一区| 91精品国产一区二区| 欧美日韩一级大片网址| 91在线视频播放地址| 国产成人精品网址| 精品中文字幕一区二区小辣椒 | 亚洲综合久久久久| 国产精品美女久久久久久久久 | 久久久久久一级片| 日韩一级大片在线| 91精品蜜臀在线一区尤物| 在线观看91视频| 91社区在线播放| 成人激情电影免费在线观看| 国产高清久久久久| 极品少妇xxxx偷拍精品少妇| 日本亚洲最大的色成网站www| 亚洲一区二区三区四区五区黄 | 久久69国产一区二区蜜臀| 日韩精品国产精品| 日韩av中文在线观看| 日韩高清一区二区| 美女一区二区三区在线观看| 天天免费综合色| 欧美96一区二区免费视频| 麻豆91在线播放| 激情伊人五月天久久综合| 国产一区二区三区黄视频| 国产一区二区精品久久99| 国产大陆a不卡| www.久久精品| 91成人国产精品| 欧美日韩国产另类一区| 欧美一级二级在线观看| 久久嫩草精品久久久久| 国产精品久久久久7777按摩| 亚洲三级免费电影| 亚洲第一搞黄网站| 极品美女销魂一区二区三区| 国产乱人伦偷精品视频免下载| 成人激情免费视频| 欧美色精品在线视频| 日韩一区二区三区免费观看| 久久久www免费人成精品| 中文字幕日韩一区| 五月婷婷久久综合| 国产精品1区2区| 色丁香久综合在线久综合在线观看| 色欧美日韩亚洲| 欧美一区二区久久久| 久久久精品免费免费| 亚洲三级电影全部在线观看高清| 天天综合色天天| 国产成人精品网址| 欧美人成免费网站| 久久精品视频在线看| 亚洲欧美日韩国产一区二区三区 | 成人免费在线观看入口| 日韩中文字幕亚洲一区二区va在线| 国产一区999| 欧美在线观看视频在线| 久久综合色8888| 亚洲男同性恋视频| 久久av中文字幕片| 91国偷自产一区二区三区成为亚洲经典 | 亚洲欧洲国产日本综合| 日日骚欧美日韩| av高清久久久| 精品剧情在线观看| 亚洲高清一区二区三区| 国产福利一区二区三区视频在线| 色94色欧美sute亚洲线路二| 精品成人免费观看| 亚洲成人www| 91视频一区二区三区| 精品久久久久久亚洲综合网| 亚洲一区二区成人在线观看| 国产精品一区三区| 欧美一区二区视频在线观看| 最新日韩在线视频| 国产suv精品一区二区883| 欧美一级精品在线| 亚洲一区二区在线观看视频| 成人sese在线| 国产午夜精品久久久久久久| 日本午夜一本久久久综合| 91国产免费看| 一色桃子久久精品亚洲| 国产成人欧美日韩在线电影| 精品不卡在线视频| 蜜桃视频一区二区| 7777精品久久久大香线蕉| 一区二区三区四区高清精品免费观看 | 成人晚上爱看视频| 久久伊99综合婷婷久久伊| 日本不卡一区二区| 欧美日韩一二区| 午夜视频在线观看一区二区三区 | 国产999精品久久| 国产日韩欧美精品电影三级在线| 久久精品国产一区二区|