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

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

?? main.c

?? Hello ! This is Atmega spi driver source. Thank you!
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*****************************************************************************
*
* Atmel Corporation
*
* File              : main.c
* Compiler          : IAR EWAAVR 2.28a/3.10c
* Revision          : $Revision: 1.3 $
* Date              : $Date: 17. mars 2004 14:47:06 $
* Updated by        : $Author: ltwa $
*
* Support mail      : avr@atmel.com
*
* Supported devices : All devices with a SPI and USART module can be used.
*                     The example is written for the ATmega8
*
* AppNote           : AVR303 - SPI-UART Gateway
*
// Author           : Andy Gayne. avr@gayne.co.uk   www.gd-technik.com
// Platform         : Developed on STK500. Can be used stand-alone.
// Description      : 
// This program provides a gateway between the Mega8 Master SPI port and an 
// RS232C ASCII terminal, for example a terminal program running on a PC. The 
// terminal can then be used to configure the port and send/receive data via
// SPI, allowing interactive communication with, and debugging of, SPI slave
// devices.
****************************************************************************/

#include "allheaders.h"

// string literals
const char __flash crlf[] = "\r\n";
const char __flash backspace[] = "\b \b";
const char __flash exchange[] = " sent,  received=";
const char __flash prompt[] = "\r\n[H]-help >";
const char __flash nullprompt[] = "\r\n          ";
const char __flash error1[] = " [illegal character entered]\007";
const char __flash newstat[] = " New";
const char __flash bit0[] = " (MSB first)";
const char __flash bit1[] = " (LSB first)";
const char __flash auto0[] = " (pulse low)";
const char __flash auto1[] = " (pulse high)";
const char __flash auto2[] = " (off)";
const char __flash gap[] = "   ";
const char __flash cfgwrite[] = " configuration saved";
const char __flash config[] = "Configuration loaded -";
const char __flash noconfig[] = "No configuration stored, defaults used\007";

const char __flash status[][MAXSTATSTRLEN] = 
{ "Status: ",
  "SCK=",
  "SS=",
  "Auto=",
  "Bit Order=",
  "Mode="
};

const char __flash help[][MAXHELPSTRLEN] = 
{ "\r\n\r\n",
  "****** SPI Gateway - USART to SPI Master Bridge ******\r\n",
  "****** V1.1   Andy Gayne 2004    GD Technik, UK ******\r\n\r\n",
  "Enter hex encoded byte to send via SPI, or commands:\r\n",
  "[?] - Show current status\r\n",
  "[X] - Extended hex sequence ( maximum 16 bytes )\r\n",
  "[Q] - SCK freq ( ----SPI2X=0-----    ----SPI2X=1----- )\r\n",
  "               ( 0=F/4   921.6kHz    4=F/2  1.8432MHz )\r\n",
  "               ( 1=F/16  230.4kHz    5=F/8   460.8kHz )\r\n",
  "               ( 2=F/64   57.6kHz    6=F/32  115.2kHz )\r\n",
  "               ( 3=F/128  28.8kHz    7=F/64   57.6kHz )\r\n",
  "[S] - Slave Select pin level (0=low, 1=high)\r\n",
  "[P] - Auto-toggle SS control (0=low, 1=high, 2=off)\r\n",
  "[T] - Bit Transmission Order (0=MSB first, 1=LSB first)\r\n",
  "[M] - SPI Clock Mode         (0 : 1 : 2 : 3)\r\n",
  "      Mode  Leading-Edge     Trailing-Edge   CPOL CPHA\r\n",
  "       0    Sample(Rising)   Setup (Falling)   0    0\r\n",
  "       1    Setup (Rising)   Sample(Falling)   0    1\r\n",
  "       2    Sample(Falling)  Setup (Rising)    1    0\r\n",
  "       3    Setup (Falling)  Sample(Rising)    1    1\r\n",
  "[W] - Write (save) configuration (auto loaded at reset)\r\n\r\n"
// 1234567890123456789012345678901234567890123456789012345678901234  64 char
};
const char __flash freq[][MAXFREQSTRLEN] = 
{ "  (921.6kHz  Fosc/4 - 3.6864MHz xtal)",
  "  (230.4kHz  Fosc/16 - 3.6864MHz xtal)",
  "  (57.6kHz  Fosc/64 - 3.6864MHz xtal)",
  "  (28.8kHz  Fosc/128 - 3.6864MHz xtal)",
  "  (1.8432MHz  Fosc/2 - 3.6864MHz xtal)",
  "  (460.8kHz  Fosc/8 - 3.6864MHz xtal)",
  "  (115.2kHz  Fosc/32 - 3.6864MHz xtal)",
  "  (57.6kHz  Fosc/64 - 3.6864MHz xtal)"
};

// globals
__eeprom __no_init unsigned char config1, config2, config3, checksum;

union
{
  unsigned char flags;
  struct
  {
    unsigned char   ss_level  :1,
                    ss_auto   :2,
                    unused    :5;
  };
};
                  

//***************************************************************************
// MAIN
//***************************************************************************
__C_task void main( void )
{
  char tmp;
  
  USART_Init( 11 );     // Baudrate to 19200 bps using a 3.6864MHz crystal
  SPI_MasterInit();
  sspinadjust(1);       // A good starting level for most applications
  ss_auto = 2;          // Default the auto toggle mode to 'off'

  __enable_interrupt(); // Enable interrupts => enable UART interrupts

  send_str(crlf);       // Send the welcome message
  send_str(crlf);
  send_str(help[1]);
  send_str(help[2]);
  send_str(crlf);
  
  loadconfig();         // load a stored configuration (if present)
  
  for( ; ; )            // loop forever
  {
    send_str(prompt);
    tmp = getnextchar();
    
    if (isxdigit(tmp)) spi_tx(tmp); // if a hex character received
    else switch (tmp)
    {
      case 'H':     // help request
        showhelp(); 
        break;
      case '?':     // show current status
        showstatus(STATLIST);
        break;
      case 'X':     // extended hex sequence
        hexsequence();
        break;
      case 'Q':     // adjust SPI SCK frequency
        setfreq();
        break;
      case 'S':     // adjust SS pin
        setsspin();
        break;
      case 'P':     // adjust SS pin auto toggle mode
        setautomode();
        break;
      case 'T':     // adjust bit transmission order
        setorder();
        break;
      case 'M':     // adjust SPI SCK mode
        setmode();
        break;
      case 'W':     // write configuration to EEPROM
        writeconfig();
        break;
      default:
        if(isgraph(tmp)) send_str(backspace); // erase invalid characters
    }// end switch
  }// end 'forever' loop
}

//***************************************************************************
// send_str - send string literal from flash to USART
//***************************************************************************
void send_str (const char __flash * str)
{
  while (*str) // send string characters until null terminator found
  {
    USART_Transmit(*str);
    str++;
  }
}

//***************************************************************************
// getnextchar - fetch next keyboard character, echo if displayable
//***************************************************************************
char getnextchar(void)
{
  char tmp;
  
  tmp = USART_Receive();                  // get next character
  tmp = toupper(tmp);                     // force to upper case
  if (isgraph(tmp)) USART_Transmit(tmp);  // Echo the received character if
                                          // printable and not whitespace.
  return(tmp); 
}

//***************************************************************************
// htoa - convert single hex digit to ASCII equivalent
//***************************************************************************
char htoa (char ch)
{
  ch += 0x30;            // add offset to ASCII '0'
  if (ch > '9') ch += 7; // if alphabetic add offset to ASCII 'A'
  return ch;
}

//***************************************************************************
// spi_tx - build byte value and send via SPI, report received byte
//***************************************************************************
void spi_tx (char u_nib) // function is passed first hex character typed
{
  char spi_ch;
  
  if (u_nib > 0x39) u_nib -= 7;     // A-F shifted to be consecutive from 0-9
  u_nib -= 0x30;                    // Remove ASCII offset
  u_nib = u_nib << 4;               // store value in upper nibble
  
  spi_ch = getnextchar();
  if (isxdigit(spi_ch))             // a valid hexadecimal character
  {
    if (spi_ch > 0x39) spi_ch -= 7; // A-F shifted to be consecutive from 0-9
    spi_ch -= 0x30;                 // Remove ASCII offset
    spi_ch |= u_nib;                // combine with upper nibble
    
    spi_ch = SPI_MasterTransmit(spi_ch);   // SPI byte exchange
    
    send_str(exchange);                    // header for SPI RX byte
    //decode received spi byte
    u_nib = (spi_ch & 0xf0) >> 4;          // extract upper nibble
    USART_Transmit( htoa(u_nib) );         // display upper nibble
    USART_Transmit( htoa(spi_ch & 0x0F) ); // display lower nibble
  }
  else send_str(error1); // abort entry for illegal second character
}

//***************************************************************************
// showhelp - show help screen and current settings
//***************************************************************************
void showhelp(void)
{
  char ix;
  
  // send all the help strings stored in the help array
  for(ix = 0;ix < (sizeof(help)/MAXHELPSTRLEN);ix++) send_str(help[ix]);

  showstatus(STATLONG); // show single line status string
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av网站一区二区三区| 天天做天天摸天天爽国产一区| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美性欧美巨大黑白大战| 亚洲同性同志一二三专区| 成人免费高清视频在线观看| 国产精品色婷婷久久58| 成人av电影在线| 自拍偷拍国产亚洲| 欧美亚洲动漫制服丝袜| 日本亚洲最大的色成网站www| 这里只有精品99re| 国产在线看一区| 国产精品电影一区二区| 91久久精品一区二区| 亚洲高清不卡在线| 精品毛片乱码1区2区3区| 国产精品亚洲第一| 亚洲精品免费在线观看| 91精品国产丝袜白色高跟鞋| 精品写真视频在线观看| 国产精品女主播在线观看| 一本大道久久精品懂色aⅴ| 亚洲.国产.中文慕字在线| 日韩小视频在线观看专区| 国产成a人亚洲精| 一区二区三区精品在线观看| 日韩视频在线你懂得| www.日韩在线| 午夜精品久久久久久久99樱桃| 精品国一区二区三区| www.爱久久.com| 日韩av一区二区在线影视| 国产精品久久777777| 欧美日韩高清一区| 国产老妇另类xxxxx| 粉嫩av一区二区三区| 色猫猫国产区一区二在线视频| 午夜精品久久久久久不卡8050 | 国产精品乱人伦| 国产精品一区一区三区| 亚洲国产欧美在线| 香蕉久久夜色精品国产使用方法 | 丁香婷婷深情五月亚洲| 国产精品一区一区三区| 国产精品影视网| 成人精品小蝌蚪| 成人av免费在线观看| 99国产精品国产精品毛片| 99这里只有精品| 色综合久久综合网欧美综合网| 91在线视频官网| 欧美亚洲图片小说| 欧美亚洲综合网| 欧美日韩国产大片| 日韩欧美aaaaaa| 久久男人中文字幕资源站| 国产三级三级三级精品8ⅰ区| 国产精品久久国产精麻豆99网站| 国产精品国产三级国产| 一区二区欧美国产| 日本aⅴ免费视频一区二区三区| 韩国女主播一区二区三区| 成人av在线观| 欧美专区日韩专区| 欧美成人aa大片| 国产免费观看久久| 亚洲一区av在线| 久久99精品久久只有精品| 成人性生交大片免费看中文 | 偷拍日韩校园综合在线| 看片网站欧美日韩| 成人免费av资源| 欧美日韩激情一区二区| 精品国产91乱码一区二区三区| 国产欧美日韩综合精品一区二区| 综合久久一区二区三区| 日本欧美一区二区| 成人国产精品免费观看动漫| 欧美性猛交xxxx黑人交| 精品福利在线导航| 一区二区三区国产| 久久99精品久久久久久久久久久久 | 亚洲成人午夜电影| 韩国精品一区二区| 91丨九色丨蝌蚪丨老版| 欧美精品精品一区| 欧美激情一区二区三区四区 | 岛国精品一区二区| 欧美精品电影在线播放| 国产精品丝袜91| 秋霞午夜av一区二区三区| 成人av资源在线| 日韩欧美一区在线| 亚洲男人天堂一区| 国产在线精品免费av| 色婷婷精品久久二区二区蜜臀av| 精品美女被调教视频大全网站| 亚洲女人小视频在线观看| 久热成人在线视频| 在线观看视频一区二区欧美日韩| 26uuu亚洲综合色欧美| 亚洲国产婷婷综合在线精品| 国产风韵犹存在线视精品| 欧美日韩在线精品一区二区三区激情 | 中文字幕在线免费不卡| 日本欧美在线观看| 欧美三级视频在线| 自拍av一区二区三区| 国产精品亚洲一区二区三区在线| 欧美另类z0zxhd电影| 亚洲天堂av一区| 国产成人精品1024| 精品国产露脸精彩对白| 青娱乐精品视频在线| 色婷婷久久久久swag精品| 国产精品女主播av| 国产成a人无v码亚洲福利| 亚洲精品在线三区| 麻豆一区二区99久久久久| 欧美精品乱码久久久久久| 亚洲一区在线播放| 色欧美88888久久久久久影院| 中文字幕av一区 二区| 国产真实乱对白精彩久久| 日韩一级视频免费观看在线| 日韩**一区毛片| 欧美另类一区二区三区| 亚洲18影院在线观看| 精品视频全国免费看| 亚洲国产日韩一级| 欧美日韩在线精品一区二区三区激情 | 久久久久久久久久久黄色| 久久精品国产精品亚洲综合| 911精品国产一区二区在线| 亚洲一区二区影院| 在线观看亚洲一区| 午夜免费久久看| 欧美性欧美巨大黑白大战| 亚洲一级片在线观看| 欧美三级日韩在线| 日韩国产欧美一区二区三区| 欧美日韩小视频| 日本亚洲三级在线| 欧美精品一区二区三区蜜桃 | ...av二区三区久久精品| 不卡一区二区在线| 亚洲狠狠丁香婷婷综合久久久| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 男男视频亚洲欧美| 欧美大片一区二区| 国产精品白丝jk黑袜喷水| 国产精品久久久久久亚洲毛片| 色综合久久六月婷婷中文字幕| 亚洲另类一区二区| 在线不卡欧美精品一区二区三区| 日韩精品一二三四| 欧美v国产在线一区二区三区| 青草av.久久免费一区| 精品动漫一区二区三区在线观看 | 成人精品gif动图一区| 综合久久久久久| 欧洲一区二区三区在线| 亚洲综合一二三区| 欧美另类z0zxhd电影| 国产毛片精品一区| 欧美国产禁国产网站cc| www.亚洲色图| 亚洲欧美日韩系列| 色爱区综合激月婷婷| 亚洲一卡二卡三卡四卡无卡久久| 欧美日韩一级视频| 国产精品一区二区三区四区| 国产精品网站在线| 色哟哟一区二区在线观看| 中文字幕免费不卡| 欧美高清激情brazzers| 久久国产人妖系列| 国产人成亚洲第一网站在线播放| 成人精品视频一区| 亚洲主播在线播放| 日韩午夜av一区| 国产成人小视频| 午夜国产不卡在线观看视频| 精品国产91乱码一区二区三区| 成人一级视频在线观看| 日韩va欧美va亚洲va久久| 久久久久99精品一区| 色哟哟日韩精品| 九九**精品视频免费播放| 一区二区三区欧美日| 日韩亚洲欧美成人一区| 懂色av中文一区二区三区| 蜜臀91精品一区二区三区| 中文字幕欧美日本乱码一线二线| 欧美在线观看一二区| 日本午夜一区二区| 一区二区三区国产| 26uuu精品一区二区| 色综合 综合色|