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

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

?? cs8900a.c

?? 最新版IAR FOR ARM(EWARM)5.11中的代碼例子
?? C
字號:
/***************************************************************************
 **
 **    CS8900A device driver
 **
 **    Used with ARM IAR C/C++ Compiler and Assembler.
 **
 **    (c) Copyright IAR Systems 2005
 **
 **    $Revision: 13147 $
 **
 ***************************************************************************/

#include <NXP/iolpc2129.h>
#include "cs8900a.h"
#include "uip.h"
#include "uip_arp.h"

typedef struct {                                    // stores CS8900A init sequence
  unsigned int Addr;
  unsigned int Data;
} TInitSeq;

static void skip_frame(void);

const TInitSeq InitSeq[] =
{
  REG_IA,       UIP_ETHADDR0 + (UIP_ETHADDR1 << 8), // set the MAC as Individual Address
  REG_IA + 2,   UIP_ETHADDR2 + (UIP_ETHADDR3 << 8),
  REG_IA + 4,   UIP_ETHADDR4 + (UIP_ETHADDR5 << 8),
  REG_LineCTL,  SERIAL_RX_ON | SERIAL_TX_ON,        // configure the Interface
  REG_RxCTL,    RX_OK_ACCEPT | RX_IA_ACCEPT | RX_BROADCAST_ACCEPT
};

// Writes a word in little-endian byte order to a specified port address
void cs8900a_write(unsigned addr, unsigned int data)
{
  IO0DIR |= 0xff << 16;                             // Data port to output

  IO0CLR = 0xf << 4;                                // Put address on bus
  IO0SET = addr << 4;

  IO0CLR = 0xff << 16;                              // Write the less significant byte to data bus
  IO0SET = data << 16;

  IO0CLR = IOW_PIN;                                 // Toggle IOW-signal
  IO0SET = IOW_PIN;

  IO0CLR = 0xf << 4;
  IO0SET = ((addr | 1) << 4);                       // And put next address on bus

  IO0CLR = 0xff << 16;                              // Write most significant byte to data bus
  IO0SET = data >> 8 << 16;

  IO0CLR = IOW_PIN;                                 // Toggle IOW-signal
  IO0SET = IOW_PIN;
}

// Reads a word in little-endian byte order from a specified port-address
unsigned cs8900a_read(unsigned addr)
{
  unsigned int value;

  IO0DIR &= ~(0xff << 16);                          // Data port to input

  IO0CLR = 0xf << 4;                                // Put address on bus
  IO0SET = addr << 4;

  IO0CLR = IOR_PIN;                                 // IOR-signal low
  value = (IO0PIN >> 16) & 0xff;                    // get less significant byte from data bus
  IO0SET = IOR_PIN;

  IO0SET = 1 << 4;                                  // IOR high and put next address on bus

  IO0CLR = IOR_PIN;                                 // IOR-signal low
  value |= ((IO0PIN >> 8) & 0xff00);                // get most significant byte from data bus
  IO0SET = IOR_PIN;                                 // IOR-signal low

  return value;
}

// Reads a word in big-endian byte order from a specified port-address
unsigned cs8900a_read_big_endian(unsigned addr)
{
  unsigned int value;

  IO0DIR &= ~(0xff << 16);                          // Data port to input

  IO0CLR = 0xf << 4;                                // Put address on bus
  IO0SET = (addr+1) << 4;

  IO0CLR = IOR_PIN;                                 // IOR-signal low
  value = ((IO0PIN >> 8) & 0xff00);                 // get most significant byte from data bus
  IO0SET = IOR_PIN;                                 // IOR-signal high

  IO0CLR = 1 << 4;                                  // Put low address on bus

  IO0CLR = IOR_PIN;                                 // IOR-signal low
  value |= (IO0PIN >> 16) & 0xff;                   // get less significant byte from data bus
  IO0SET = IOR_PIN;

  return value;
}

void cs8900a_init(void)
{
  int i;


  IO0SET = IOR_PIN | IOW_PIN;                       // Reset outputs, control lines high

  IO0SET = RED_LED | YELLOW_LED | GREEN_LED;        // All LEDs OFF

  IO0DIR = ~0U;                                     // all as outputs

  IO0CLR = 0xff << 16;                              // clear data outputs

  // Reset the CS8900A
  cs8900a_write(ADD_PORT, REG_SelfCTL);
  cs8900a_write(DATA_PORT, POWER_ON_RESET);

  // Wait until chip reset
  cs8900a_write(ADD_PORT, REG_SelfST);
  while ((cs8900a_read(DATA_PORT) & INIT_DONE) == 0)
    ;

  // Configure the CS8900A
  for (i = 0; i < sizeof InitSeq / sizeof (TInitSeq); ++i)
    {
      cs8900a_write(ADD_PORT, InitSeq[i].Addr);
      cs8900a_write(DATA_PORT, InitSeq[i].Data);
    }
}

void
cs8900a_send(void)
{
  unsigned u;

  IO0CLR = RED_LED;             // Turn the RED LED ON when frame starts

  // Transmit command
  cs8900a_write(TX_CMD_PORT, TX_START_ALL_BYTES);
  cs8900a_write(TX_LEN_PORT, uip_len);


  u = 8;                        // Set the number of retries
  for (;;)
    {
      // Check for available buffer space
      cs8900a_write(ADD_PORT, REG_BusST);
      if (cs8900a_read(DATA_PORT) & READY_FOR_TX_NOW)
        break;
      if (u -- == 0)
        {
          IO0SET = RED_LED;     // Turn the RED LED OFF at the end of a frame
          return;
        }


      skip_frame();             // No space available, skip the received frame and try again
    }

  IO0DIR |= 0xff << 16;                     // Data port as output

  // Send 40+14=54 bytes of header
  for (u = 0; u < 54; u += 2)
    {
      IO0CLR = 0xf << 4;                    // Put address on the bus
      IO0SET = TX_FRAME_PORT << 4;

      IO0CLR = 0xff << 16;                  // Write less significant byte to data bus
      IO0SET = uip_buf[u] << 16;            // write less significant byte to data bus

      IO0CLR = IOW_PIN;                     // Toggle IOW-signal
      IO0SET = IOW_PIN;

      IO0CLR = 0xf << 4;                    // Put address on the bus
      IO0SET = (TX_FRAME_PORT | 1) << 4;    // and put the next address

      IO0CLR = 0xff << 16;                  // Write less significant byte to data bus
      IO0SET = uip_buf[u+1] << 16;          // write less significant byte to data bus

      IO0CLR = IOW_PIN;                     // Toggle IOW-signal
      IO0SET = IOW_PIN;
    }

  if (uip_len <= 54)
    {
      IO0SET = RED_LED;         // Turn the RED LED OFF at the end of frame
      return;
    }

  // Send remainder of packet, the application data
  uip_len -= 54;
  for (u = 0; u < uip_len; u += 2)
    {
      IO0CLR = 0xf << 4;                    // address
      IO0SET = TX_FRAME_PORT << 4;

      IO0CLR = 0xff << 16;                  // Write less significant byte to data bus
      IO0SET = uip_appdata[u] << 16;        // write less significant byte to data bus

      IO0CLR = IOW_PIN;                     // Toggle IOW-signal
      IO0SET = IOW_PIN;

      IO0CLR = 0xf << 4;                    // Put address on bus
      IO0SET = (TX_FRAME_PORT | 1) << 4;    // and put next address on bus

      IO0CLR = 0xff << 16;                  // Write less significant byte to data bus
      IO0SET = uip_appdata[u+1] << 16;      // write less significant byte to data bus

      IO0CLR = IOW_PIN;                     // Toggle IOW-signal
      IO0SET = IOW_PIN;
    }
  IO0SET = RED_LED;  // Turn the RED LED OFF on the end of frame
}

static void skip_frame(void)
{
  // No space available, skip the received frame and try again
  cs8900a_write(ADD_PORT, REG_RxCFG);
  cs8900a_write(DATA_PORT, cs8900a_read(DATA_PORT) | SKIP_1);
}

u16_t cs8900a_poll(void)
{
  u16_t len, u;

  // Check the receiver event register for a valid frame available
  cs8900a_write(ADD_PORT, REG_RxEvent);
  if ((cs8900a_read(DATA_PORT) & 0xd00) == 0)
    return 0;

  IO0CLR = GREEN_LED;                           // Turn the GREED LED ON when frame is received


  cs8900a_read_big_endian(RX_FRAME_PORT);  // Read the receiver status and discard it


  len = cs8900a_read_big_endian(RX_FRAME_PORT); // Read frame length

  // If the frame is too big to handle, throw it away
  if (len > UIP_BUFSIZE)
    {
      skip_frame();
      return 0;
    }

  IO0DIR &= ~(0xff << 16);                  // Data port to input
  IO0CLR = 0xf << 4;                        // put address on bus
  IO0SET = RX_FRAME_PORT << 4;

  // Read bytes into uip_buf
  u = 0;
  while (u < len)
    {
      IO0CLR = 1 << 4;                      // put address on bus

      IO0CLR = IOR_PIN;                     // IOR-signal low
      uip_buf[u] = IO0PIN >> 16;            // get most significant byte from data bus
      IO0SET = IOR_PIN;                     // IOR-signal high

      IO0SET = 1 << 4;                      // put address on bus

      IO0CLR = IOR_PIN;                     // IOR-signal low
      uip_buf[u+1] = IO0PIN >> 16;          // get most significant byte from data bus
      IO0SET = IOR_PIN;                     // IOR-signal high
      u += 2;
    }

  IO0SET = GREEN_LED;                       // Turn the GREED LED OFF when frame finished.
  return len;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av亚洲精华国产精华精华| 亚洲影视资源网| 色播五月激情综合网| 天天av天天翘天天综合网| 制服丝袜亚洲色图| 99精品久久久久久| 日韩不卡手机在线v区| 久久―日本道色综合久久| av午夜一区麻豆| 午夜精品久久久久久久99樱桃| 日韩一区二区免费在线电影 | 97se亚洲国产综合自在线不卡| 亚洲日本欧美天堂| 欧美一级日韩一级| 成人a区在线观看| 三级欧美在线一区| 国产精品久久久久久一区二区三区| 欧美亚日韩国产aⅴ精品中极品| 免费日韩伦理电影| 亚洲国产精品传媒在线观看| 欧美日韩一区三区| 成人一二三区视频| 热久久免费视频| 国产精品大尺度| 欧美一区二区三区在线电影| 99在线精品观看| 久久超碰97人人做人人爱| 亚洲精品国产一区二区精华液 | 亚洲欧美自拍偷拍| 欧美一级高清大全免费观看| yourporn久久国产精品| 免费的国产精品| 亚洲精品国产无天堂网2021| 欧美精品一区二区三区蜜桃| 在线观看欧美日本| 丁香六月综合激情| 日韩av不卡在线观看| 中文字幕在线观看不卡视频| 日韩精品中午字幕| 欧美日韩国产综合一区二区| 懂色av中文字幕一区二区三区 | 九色综合国产一区二区三区| 亚洲国产中文字幕在线视频综合 | 这里只有精品电影| 91在线丨porny丨国产| 国产伦精品一区二区三区视频青涩 | 国产亚洲欧美色| 欧美电影免费提供在线观看| 91美女福利视频| 国产综合成人久久大片91| 天使萌一区二区三区免费观看| 中文字幕综合网| 国产精品毛片大码女人| 久久免费精品国产久精品久久久久| 7777精品伊人久久久大香线蕉 | 欧美揉bbbbb揉bbbbb| 国产福利一区在线观看| 久久草av在线| 老司机免费视频一区二区| 色综合色综合色综合色综合色综合 | 久久久久免费观看| 在线不卡中文字幕| 欧美剧在线免费观看网站 | 欧美蜜桃一区二区三区| 色偷偷久久人人79超碰人人澡| 波多野结衣在线aⅴ中文字幕不卡| 国产剧情在线观看一区二区| 狠狠色狠狠色综合系列| 久久av老司机精品网站导航| 男人的j进女人的j一区| 亚洲福利一区二区| 丝袜亚洲另类丝袜在线| 日韩国产精品91| 日韩二区三区在线观看| 麻豆精品在线看| 亚洲线精品一区二区三区八戒| 亚洲线精品一区二区三区| 亚洲无线码一区二区三区| 亚洲不卡av一区二区三区| 日韩成人av影视| 激情综合色综合久久综合| 韩国精品主播一区二区在线观看 | 国产女同互慰高潮91漫画| 久久久亚洲欧洲日产国码αv| 精品久久99ma| 国产拍揄自揄精品视频麻豆| 国产精品免费av| 亚洲综合丁香婷婷六月香| 亚洲v精品v日韩v欧美v专区| 偷拍一区二区三区四区| 欧美日韩精品高清| 在线观看成人免费视频| 国产欧美日韩亚州综合| 日本午夜一本久久久综合| 久久99久久久久| 欧美国产1区2区| 日本一区二区久久| 亚洲欧美一区二区三区孕妇| 一区二区三区在线看| 日韩精品一二三四| 国产成人午夜视频| 91国产精品成人| 欧美一卡2卡3卡4卡| 久久精品夜色噜噜亚洲aⅴ| 日韩理论片在线| 青娱乐精品在线视频| 丁香桃色午夜亚洲一区二区三区| 色综合欧美在线| 欧美tickling网站挠脚心| 国产精品乱码久久久久久| 亚洲成人一区在线| 国产黄色91视频| 欧美综合天天夜夜久久| 亚洲精品一区二区三区在线观看| 国产精品成人在线观看| 欧美在线视频你懂得| 日韩一级片在线播放| 综合欧美一区二区三区| 亚洲综合在线视频| 国产一区二区三区观看| 在线视频欧美精品| 久久嫩草精品久久久久| 婷婷成人综合网| www.成人网.com| 精品国产伦一区二区三区观看方式 | 欧美四级电影网| 国产亚洲一区二区三区四区 | 亚洲欧美成人一区二区三区| 奇米四色…亚洲| 91影院在线观看| 国产亚洲综合av| 美女高潮久久久| 欧美巨大另类极品videosbest | 亚洲国产精品一区二区www在线| 蜜芽一区二区三区| 91网页版在线| 久久久久久久电影| 美女www一区二区| 欧美唯美清纯偷拍| 中文字幕一区日韩精品欧美| 久久精品国内一区二区三区| 欧美在线看片a免费观看| 国产精品伦理在线| 国产一区二区伦理片| 9191久久久久久久久久久| 亚洲精选视频在线| 成人小视频在线| 久久综合网色—综合色88| 免费成人在线影院| 欧美一区二区性放荡片| 亚洲午夜精品久久久久久久久| 99国产一区二区三精品乱码| 日本一区二区三区在线不卡| 国产尤物一区二区在线| 日韩欧美国产电影| 免费成人在线播放| 日韩手机在线导航| 日本一道高清亚洲日美韩| www.av精品| 国产一区二三区| 亚洲一区二区三区四区在线| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 国产欧美精品一区| 国产又黄又大久久| 久久一区二区视频| 国产成人在线视频网站| 久久影院电视剧免费观看| 国产真实乱偷精品视频免| 精品国产一区二区在线观看| 久久99国产乱子伦精品免费| 欧美大肚乱孕交hd孕妇| 精品亚洲成a人| 久久九九久精品国产免费直播| 国产一区二区三区视频在线播放| 久久久久久免费网| 国产毛片精品视频| 国产精品白丝在线| 99久久99久久综合| 一区二区三区免费看视频| 精品婷婷伊人一区三区三| 婷婷久久综合九色国产成人| 日韩欧美成人一区| 成人性视频免费网站| 亚洲另类在线制服丝袜| 伊人色综合久久天天人手人婷| 蜜桃av一区二区| 欧美videofree性高清杂交| 国产精品主播直播| 国产精品成人在线观看| 91在线一区二区| 洋洋成人永久网站入口| 欧美二区三区91| 精彩视频一区二区| 国产精品久久久久影视| 欧美性视频一区二区三区| 日本中文在线一区| 国产欧美一区在线| 在线观看亚洲成人| 国产曰批免费观看久久久| 午夜不卡av免费|