虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

STM32-DMA-USART<b>学习笔记</b>

  • 12345

    /****************temic*********t5557***********************************/    #include   <at892051.h>     #include   <string.h>    #include   <intrins.h>     #include   <stdio.h>     #define    uchar    unsigned char     #define    uint     unsigned int     #define    ulong    unsigned long     //STC12C2051AD的SFR定义     sfr  WDT_CONTR = 0xe1;//stc2051的看门狗??????     /**********全局常量************/    //写卡的命令     #define    write_command0       0//写密码     #define    write_command1       1//写配置字     #define    write_command2       2//密码写数据     #define    write_command3       3//唤醒     #define    write_command4       4//停止命令     #define    TRUE       1     #define    FALSE      0     #define    OK         0     #define    ERROR      255     //读卡的时间参数us     #define ts_min          250//270*11.0592/12=249//取近似的整数     #define ts_max          304//330*11.0592/12=304     #define t1_min          73//90*11.0592/12=83:-10调整     #define t1_max          156//180*11.0592/12=166     #define t2_min          184//210*11.0592/12=194     #define t2_max          267//300*11.0592/12=276     //***********不采用中断处理:采用查询的方法读卡时关所有中断****************/     sbit p_U2270B_Standby = P3^5;//p_U2270B_Standby PIN=13     sbit p_U2270B_CFE = P3^3;//p_U2270B_CFE     PIN=6     sbit p_U2270B_OutPut = P3^7;//p_U2270B_OutPut  PIN=2     sbit wtd_sck = P1^7;//SPI总线     sbit wtd_si = P1^3;    sbit wtd_so = P1^2;    sbit iic_data = P1^2;//lcd IIC     sbit iic_clk = P1^7;    sbit led_light = P1^6;//测试绿灯     sbit led_light1 = P1^5;//测试红灯     sbit led_light_ok  = P1^1;//读卡成功标志     sbit fengmingqi = P1^5;    /***********全局变量************************************/       uchar data Nkey_a[4] = {0xA0, 0xA1, 0xA2, 0xA3};//初始密码             //uchar idata card_snr[4];   //配置字     uchar data bankdata[28] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7};     //存储卡上用户数据(1-7)7*4=28     uchar data cominceptbuff[6] = {1,2,3,4,5,6};//串口接收数组ram     uchar command; //第一个命令     uchar command1;//     //uint  temp;     uchar j,i;    uchar myaddr = 8;    //uchar ywqz_count,time_count;             //ywqz jishu:     uchar bdata DATA;    sbit BIT0 = DATA^0;    sbit BIT1 = DATA^1;    sbit BIT2 = DATA^2;    sbit BIT3 = DATA^3;    sbit BIT4 = DATA^4;    sbit BIT5 = DATA^5;    sbit BIT6 = DATA^6;    sbit BIT7 = DATA^7;    uchar bdata DATA1;    sbit BIT10 = DATA1^0;    sbit BIT11 = DATA1^1;    sbit BIT12 = DATA1^2;    sbit BIT13 = DATA1^3;    sbit BIT14 = DATA1^4;    sbit BIT15 = DATA1^5;    sbit BIT16 = DATA1^6;    sbit BIT17 = DATA1^7;    bit i_CurrentLevel;//i_CurrentLevel  BIT 00H(Saves current level of OutPut pin of U2270B)     bit timer1_end;    bit read_ok = 0;    //缓存定时值,因用同一个定时器     union HLint { uint W;    struct   {    uchar H;uchar L;   }   B; };//union HLint idata a     union HLint data a;    //缓存定时值,因用同一个定时器     union HLint0 { uint W;    struct {   uchar H;   uchar L; } B; };//union HLint idata a     union HLint0 data b;    /**********************函数原型*****************/    //读写操作     void f_readcard(void);//全部读出1~7 AOR唤醒     void f_writecard(uchar x);//根据命令写不同的内容和操作     void f_clearpassword(void);//清除密码     void f_changepassword(void);//修改密码     //功能子函数     void write_password(uchar data *data p);//写初始密码或数据     void write_block(uchar x,uchar data *data p);//不能用通用指针     void write_bit(bit x);//写位     /*子函数区*****************************************************/    void delay_2(uint x)    //延时,时间x*10us@12mhz,最小20us@12mhz     {    x--; x--;    while(x)    {      _nop_();      _nop_();      x--;    }    _nop_();//WDT_CONTR=0X3C;不能频繁的复位     _nop_();    }    /////////////////////////////////////////////////////////////////////     void initial(void)    {    SCON = 0x50; //串口方式1,允许接收     //SCON  =0x50;     //01010000B:10位异步收发,波特率可变,SM2=0不用接收到有效停止位才RI=1,     //REN=1允许接收     TMOD = 0x21; //定时器1 定时方式2(8位),定时器0 定时方式1(16位)     TCON = 0x40; //设定时器1 允许开始计时(IT1=1)     TH1 = 0xfD;  //FB 18.432MHz 9600 波特率     TL1 = 0xfD;  //fd 11.0592 9600     IE = 0X90;     //EA=ES=1     TR1 = 1;     //启动定时器     WDT_CONTR = 0x3c;//使能看门狗     p_U2270B_Standby = 0;//单电源     PCON = 0x00;    IP = 0x10;//uart you xian XXXPS PT1 PX1 PT0 PX0     led_light1 = 1;    led_light = 0;    p_U2270B_OutPut = 1;    }    /************************************************/    void f_readcard()//读卡     {    EA = 0;//全关,防止影响跳变的定时器计时     WDT_CONTR = 0X3C;//喂狗     p_U2270B_CFE = 1;//      delay_2(232);  //>2.5ms            /*   //   aor    用唤醒功能来防碰撞   p_U2270B_CFE = 0; delay_2(18);//start gap>150us   write_bit(1);//10=操作码读0页   write_bit(0);       write_password(&bankdata[24]);//密码block7   p_U2270B_CFE =1 ;//    delay_2(516);//编程及确认时间5.6ms   */    WDT_CONTR = 0X3C;//喂狗     led_light = 0;    b.W = 0;    while(!(read_ok == 1))    {             //while(p_U2270B_OutPut);//等一个稳定的低电平?超时判断?              while(!p_U2270B_OutPut);//等待上升沿的到来同步信号检测1       TR0 = 1;      //deng xia jiang       while(p_U2270B_OutPut);//等待下降沿       TR0 = 0;   a.B.H = TH0;   a.B.L = TL0;   TH0 = TL0 = 0;   TR0 = 1;//定时器晚启动10个周期       //同步头       if((324 < a.W) && (a.W < 353)) ;//检测同步信号1                  else     {     TR0 = 0;     TH0 = TL0 = 0;     goto read_error;    }      //等待上升沿        while(!p_U2270B_OutPut);   TR0 = 0;   a.B.H = TH0;   a.B.L = TL0;   TH0 = TL0 = 0;   TR0 = 1;//b.N1<<=8;            if(a.B.L < 195);//0.5p       else     {     TR0 = 0;     TH0 = TL0 = 0;     goto read_error;    }      //读0~7块的数据       for(j = 0;j < 28;j++)      {       //uchar i;                  for(i = 0;i < 16;i++)//8个位        {        //等待下降沿的到来         while(p_U2270B_OutPut);                TR0 = 0;     a.B.H = TH0;     a.B.L = TL0;     TH0 = TL0 = 0;     TR0 = 1;              if(t2_max < a.W/*)&&(a.W < t2_max)*/)//1P          {         b.W >>= 2;//先左移再赋值          b.B.L += 0xc0;                             i++;        }        else if(t1_min < a.B.L/*)&&(a.B.L < t1_max)*/)//0.5p         {         b.W >>= 1;         b.B.L += 0x80;                           }        else      {      TR0 = 0;      TH0 = TL0 = 0;      goto read_error;     }        i++;        while(!p_U2270B_OutPut);//上升                   TR0 = 0;     a.B.H = TH0;     a.B.L = TL0;     TH0 = TL0 = 0;     TR0 = 1;                      if(t2_min < a.W/*)&&(a.W < t2_max)*/)//1P          {         b.W >>= 2;         i++;        }        else if(t1_min < a.B.L/*a.W)&&(a.B.L < t1_max)*/)//0.5P         //else if(!(a.W==0))         {         b.W >>= 1;         //temp+=0x00;          //led_light1=0;led_light=1;delay_2(40000);         }        else      {      TR0 = 0;      TH0 = TL0 = 0;      goto read_error;     }        i++;       }       //取出奇位        DATA = b.B.L;       BIT13 = BIT7;    BIT12 = BIT5;    BIT11 = BIT3;    BIT10 = BIT1;       DATA = b.B.H;       BIT17 = BIT7;    BIT16 = BIT5;    BIT15 = BIT3;    BIT14 = BIT1;       bankdata[j] = DATA1;      }              read_ok = 1;//读卡完成了     read_error:    _nop_();    }       }    /***************************************************/    void f_writecard(uchar x)//写卡     {    p_U2270B_CFE = 1;    delay_2(232);  //>2.5ms            //psw=0 standard write     if (x == write_command0)//写密码:初始化密码     {      uchar i;      uchar data *data p;      p = cominceptbuff;      p_U2270B_CFE = 0;   delay_2(31);//start gap>330us       write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_bit(0);//写锁定位0       for(i = 0;i < 35;i++)      {       write_bit(1);//写数据位1       }      p_U2270B_CFE = 1;      led_light1 = 0;   led_light = 1;   delay_2(40000);//测试使用       //write_block(cominceptbuff[4],p);       p_U2270B_CFE = 1;      bankdata[20] = cominceptbuff[0];//密码存入       bankdata[21] = cominceptbuff[1];      bankdata[22] = cominceptbuff[2];      bankdata[23] = cominceptbuff[3];    }    else if (x == write_command1)//配置卡参数:初始化     {      uchar data *data p;      p = cominceptbuff;      write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_bit(0);//写锁定位0               write_block(cominceptbuff[4],p);      p_U2270B_CFE=  1;    }    //psw=1  pssword mode     else if(x == write_command2)  //密码写数据    {      uchar data*data p;      p = &bankdata[24];      write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_password(p);//发口令       write_bit(0);//写锁定位0       p = cominceptbuff;      write_block(cominceptbuff[4],p);//写数据            }    else if(x == write_command3)//aor    //唤醒 {      //cominceptbuff[1]操作码10 X xxxxxB       uchar data *data p;      p = cominceptbuff;      write_bit(1);//10       write_bit(0);             write_password(p);//密码       p_U2270B_CFE = 1;//此时数据不停的循环传出     }    else //停止操作码     {      write_bit(1);//11       write_bit(1);             p_U2270B_CFE = 1;         }    p_U2270B_CFE = 1;    delay_2(560);//5.6ms     }    /************************************/    void f_clearpassword()//清除密码     {    uchar data *data p;    uchar i,x;          p = &bankdata[24];//原密码     p_U2270B_CFE = 0; delay_2(18);//start gap>150us     //操作码10:10xxxxxxB     write_bit(1);    write_bit(0);              for(x = 0;x < 4;x++)//发原密码     {             DATA = *(p++);      for(i = 0;i < 8;i++)      {       write_bit(BIT0);       DATA >>= 1;      }    }    write_bit(0);//锁定位0:0     p = &cominceptbuff[0];    write_block(0x00,p);//写新配置参数:pwd=0             //密码无效:即清除密码     DATA = 0x00;//停止操作码00000000B     for(i = 0;i < 2;i++)    {    write_bit(BIT7);    DATA <<= 1;    }    p_U2270B_CFE = 1;       delay_2(560);//5.6ms     }    /*********************************/    void f_changepassword()//修改密码            {       uchar data *data p;    uchar i,x,addr;    addr = 0x07;//block7     p = &Nkey_a[0];//原密码     DATA = 0x80;//操作码10:10xxxxxxB     for(i = 0;i < 2;i++)    {      write_bit(BIT7);      DATA <<= 1;    }    for(x = 0;x < 4;x++)//发原密码     {             DATA = *(p++);      for(i = 0;i < 8;i++)      {       write_bit(BIT7);       DATA >>= 1;      }    }    write_bit(0);//锁定位0:0     p = &cominceptbuff[0];    write_block(0x07,p);//写新密码     p_U2270B_CFE = 1;    bankdata[24] = cominceptbuff[0];//密码存入     bankdata[25] = cominceptbuff[1];    bankdata[26] = cominceptbuff[2];    bankdata[27] = cominceptbuff[3];    DATA = 0x00;//停止操作码00000000B     for(i = 0;i < 2;i++)    {      write_bit(BIT7);      DATA <<= 1;    }    p_U2270B_CFE = 1;       delay_2(560);//5.6ms     }    /***************************子函数***********************************/    void write_bit(bit x)//写一位     {    if(x)    {      p_U2270B_CFE = 1;   delay_2(32);//448*11.0592/120=42延时448us       p_U2270B_CFE = 0;   delay_2(28);//280*11.0592/120=26写1     }    else    {      p_U2270B_CFE = 1;   delay_2(92);//192*11.0592/120=18       p_U2270B_CFE = 0;   delay_2(28);//280*11.0592/120=26写0     }    }    /*******************写一个block*******************/    void write_block(uchar addr,uchar data *data p)    {    uchar i,j;        for(i = 0;i < 4;i++)//block0数据     {             DATA = *(p++);      for(j = 0;j < 8;j++)      {       write_bit(BIT0);       DATA >>= 1;      }    }    DATA = addr <<= 5;//0地址     for(i = 0;i < 3;i++)    {      write_bit(BIT7);      DATA <<= 1;    }                   }    /*************************************************/    void write_password(uchar data *data p)    {    uchar i,j;        for(i = 0;i < 4;i++)//     {             DATA = *(p++);      for(j = 0;j < 8;j++)      {       write_bit(BIT0);       DATA >>= 1;      }    }        }   /*************************************************/   void main()    {    initial();    TI = RI = 0;    ES = 1;    EA = 1;  delay_2(28);   //f_readcard();     while(1) {   f_readcard();      //读卡   f_writecard(command1);  //写卡    f_clearpassword();   //清除密码     f_changepassword();    //修改密码 } }

    标签: 12345

    上传时间: 2017-10-20

    上传用户:my_lcs

  • java入门编程合集

    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?    //这是一个菲波拉契数列问题 public class lianxi01 { public static void main(String[] args) { System.out.println("第1个月的兔子对数:    1"); System.out.println("第2个月的兔子对数:    1"); int f1 = 1, f2 = 1, f, M=24;      for(int i=3; i<=M; i++) {       f = f2;       f2 = f1 + f2;       f1 = f;       System.out.println("第" + i +"个月的兔子对数: "+f2);          } } } 【程序2】    题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。    public class lianxi02 { public static void main(String[] args) {     int count = 0;     for(int i=101; i<200; i+=2) {      boolean b = false;      for(int j=2; j<=Math.sqrt(i); j++)      {         if(i % j == 0) { b = false; break; }          else           { b = true; }      }         if(b == true) {count ++;System.out.println(i );}                                   }     System.out.println( "素数个数是: " + count); } } 【程序3】    题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。 public class lianxi03 { public static void main(String[] args) {      int b1, b2, b3; 

    标签: java 编程

    上传时间: 2017-12-24

    上传用户:Ariza

  • CAN总线(SJA1000T、TJA1050)全套开发资料

    CAN总线(SJA1000T、TJA1050)全套开发资料,包含can-bus开发步骤,CAN学习笔记,CAN中文协议,PCA82C250周立功,SJA1000独立CAN控制器,SJA1000独立的CAN控制器应用指南

    标签: 1000T 1000 1050 CAN SJA TJA 总线 开发资料

    上传时间: 2018-05-10

    上传用户:回忆是个说书人

  • 学生成绩管理

    #include<stdio.h> #include<windows.h> int xuanxiang; int studentcount; int banjihao[100]; int xueqihao[100][10]; char xm[100][100]; int xuehao[100][10]; int score[100][3]; int yuwen; int shuxue[000]; int yingyu[100]; int c[100]; int p; char x[1000][100]="",y[100][100]="";/*x学院 y专业 z班级*/  int z[100];  main() { void input(); void inputsc(); void alter(); void scbybannji(); printf("--------学生成绩管理-----\n"); printf("请按相应数字键来实现相应功能\n"); printf("1.录入学生信息   2.录入学生成绩       3.修改学生成绩\n"); printf("4.查询学生成绩   5.不及格科目及名单   6.按班级输出学生成绩单\n"); printf("请输入你要实现的功能所对应的数字:"); scanf("%d",&xuanxiang); system("cls"); getchar(); switch (xuanxiang) { case 1:input(); case 2:inputsc(); case 3:alter(); /*case 4:select score(); case 5:bujigekemujimingdan();*/ case 6:scbybanji; } } void input() { int i; printf("请输入你的学院名称:"); gets(x); printf("请输入你的专业名称:"); gets(y); printf("请输入你的班级号:"); scanf("%d",&z); printf("请输入你们一个班有几个人:"); scanf("%d",&p); system("cls"); for(i=0;i<p;i++) { printf("请输入第%d个学生的学号:",i+1); scanf("%d",xuehao[i]); getchar(); printf("请输入第%d个学生的姓名:",i+1); gets(xm[i]); system("cls"); } printf("您已经录入完毕您的班级所有学生的信息!\n"); printf("您的班级为%s%s%s\n",x,y,z); /*alter(p);*/ } void inputsc() { int i; for(i=0;i<p;i++) { printf("\n"); printf("--------------------------------------------------------------------------------\n\n"); printf("\t\t\t\t录入学生的成绩\n\n\n"); printf("--------------------------------------------------------------------------------\n\n"); printf("\t\t\t\t%s\n",xm[i]); printf("\n"); printf("\t\t\t\t数学:"); scanf("%d",&shuxue[i]); printf("\n"); getchar(); printf("\t\t\t\t英语:"); scanf("%d",&yingyu[i]); printf("\n"); getchar(); printf("\t\t\t\tc语言:"); scanf("%d",&c[i]); system("cls"); } } void alter() { int i;/*循环变量*/ int m[10000];/*要查询的学号*/ int b;/*修改后的成绩*/ char kemu[20]=""; printf("请输入你要修改的学生的学号"); scanf("%d",&m); for (i=0;i<p;i++) { if (m==xuehao[i]) { printf("%s的数学成绩为%d,英语成绩为%d,c语言成绩为%d,xm[i],shuxue[i],yingyu[i],c[i]");  printf("请输入你想修改的科目");} } gets(kemu); getchar(); if (kemu=="数学"); { scanf("%d",&b); shuxue[i]=b;} if (kemu=="英语"); { scanf("%d",&b); yingyu[i]=b;} if (kemu=="c语言"); { scanf("%d",&b); c[i]=b; } printf("%s的数学成绩为%d,英语成绩为%d,c语言成绩为%d,xm[i],shuxue[i],yingyu[i],c[i]"); } void scbybannji() { int i; char zyname[20]; int bjnumber; printf("请输入你的专业名称"); scanf("%s",&zyname); printf("请输入你的班级号"); scanf("%d",&bjnumber); for (i=0;i<p;i++) { if (zyname==y[i]); if (bjnumber==z[i]); printf("专业名称%s班级号%d数学成绩%d英语成绩%dc语言成绩%d,y[i],z[i],shuxue[i],yingyu[i],c[i]"); } }

    标签: c语言

    上传时间: 2018-06-08

    上传用户:2369043090

  • MIPI设计指导

    MIPI是MIPI联盟发起的为移动应用处理器定制的开放标准,越来越多的显示模组使用MIPI信号。本文是个人学习笔记,介绍了MIPI协议的各个层的协议标准,并举例介绍。

    标签: mipi

    上传时间: 2022-03-05

    上传用户:

  • FPGA核心知识详解与开发技巧-完整版.docx

    FPGA核心知识详解与开发技巧对初级FPGA工程师而言,必须掌握FPGA相关基础知识、精通硬件描述语言、熟练数字电路设计、加强工程项目的实践。应广大初级FPGA工程师/FPGA爱好者之需,电子发烧友网策划整合并隆重推出FPGA核心知识详解与开发技巧电子书,以后会陆续推出其他章节,敬请广大工程师朋友继续关注和留意。目录1、FPGA核心知识详解(1):FPGA入门必备2、FPGA核心知识详解(2):FPGA入门书籍推荐篇3、FPGA核心知识详解(3):那些让FPGA初学者纠结的仿真4、FPGA开发技巧(1)5、FPGA开发技巧(2)6、FPGA开发技巧(3)7、FPGA开发技巧(4)8、FPGA开发技巧(5)9、FPGA开发技巧(6)你能从这本书中学到什么本书主要讲解FPGA相关基础知识、精通硬件描述语言、熟练数字电路设计、加强工程项目的实践,包括:FPGA入门必备FPGA入门书籍推荐篇那些让FPGA初学者纠结的仿真FPGA开发技巧(6篇)适宜人群本书籍主要介绍FPGA设计技巧,适合电子类专业的学生、初级电子工程师需要学习FPGA设计知识的从业人员希望加强FPGA设计技能的电子爱好者FPGA学习笔记之时序处理技巧时序分析是FPGA设计中永恒的话题,也是FPGA开发人员设计进阶的必由之路。慢慢来,先介绍时序分析中的一些基本概念。应广大初级FPGA工程师/FPGA爱好者之需,电子发烧友网策划整合并隆重推出FPGA学习笔记之时序处理技巧电子书,以后会陆续推出其他章节,敬请广大工程师朋友继续关注和留意。目录1时序分析中的一些基本概念2FPGA进行静态时序分析3Xilinx FPGA编程技巧常用时序约束方法48 忠告 FPGA系统设计时序检查问题5如何有效的管理FPGA设计中的时序问题你能从这本书中学到什么本书主要讲解FPGA时序分析的基本概念及常见问题的解决办法,包括:时序分析中的一些基本概念FPGA进行静态时序分析Xilinx FPGA编程技巧常用时序约束方法8 忠告 FPGA系统设计时序检查问题如何有效的管理FPGA设计中的时序问题适宜人群本书籍主要介绍FPGA设计技巧,适合电子类专业的学生、初级电子工程师需要学习FPGA设计知识的从业人员希望加强FPGA设计技能的电子爱好者

    标签: fpga

    上传时间: 2022-05-02

    上传用户:XuVshu

  • (网盘)python全套电子书籍

    |- 实例教程1小时学会Python.doc - 76.00 kB|- 深入浅出Python(英文版).pdf - 288.00 kB|- 老王python送上免费的python教程.zip - 15.80 MB|- 简明 Python 教程.chm - 98.00 kB|- 活学活用wxPython.pdf - 3.20 MB|- 笨办法学Python.pdf - 821.00 kB|- 《Python Algorithm》读书笔记(图片版).7z - 4.50 MB|- [Python源码剖析-深度探索动态语言核心技术].陈儒.扫描版[www.ed2kers.com].pdf - 29.00 MB|- [Python基础教程2].带书签.pdf - 33.40 MB|- [Python高级编程].(法)莱德.扫描版.pdf - 72.30 MB|- [Python参考手册(第4版)].(美)比兹利.扫描版.pdf - 26.70 MB|- [Python.Unix和Linux系统管理指南].(美)基弗特.扫描版.pdf - 38.40 MB|- wxPython实战(中文版).pdf - 3.50 MB|- Python中文手册v2.4.chm - 397.00 kB|- Python源码剖析 [文字版].pdf - 1.90 MB|- Python语言从入门到深入教程.zip - 9.60 MB|- Python学习手册_第3版.pdf - 41.10 MB|- Python学习手册(第4版).pdf - 94.00 MB|- python学习笔记.txt - 3.00 kB|- Python学习笔记.pdf - 391.00 kB|- Python网络编程基础.pdf - 26.00 MB|- Python数据结构与算法(En).chm - 3.30 MB|- Python手册.chm - 101.00 kB|- python内置函数.pdf - 268.00 kB|- Python库参考手册.pdf - 92.00 kB|- python教程.rar - 23...

    标签: python

    上传时间: 2022-06-06

    上传用户:fliang

  • SPI-4.2协议详解

    1. 文档概述1.1. 文档目的本文档描述对SPI-4.2 协议的理解,从浅入深地详细讲解规范。1.2. SPI-4.2 简介SPI-4.2 协议的全称为System Packet Interface ,可译为“系统包接口” 。该协议由OIF( Optical Internetwoking Forum )创建,用于规定10Gbps 带宽应用下的物理层( PHY)和链路层( Link )之间的接口标准。SPI-4.2 是一个支持多通道的包或信元传输的接口,主要应用于OC-192 ATM 或PoS 的带宽汇聚、及10G 以太网应用中。1.3. 参考资料1) SPI-4.2 协议的标准文档。2) 中兴公司对SPI-4.2 协议文档的翻译稿。2. SPI-4.2 协议2.1. SPI-4.2 系统参考模型图 1 SPI-4.2 系统参考模型图X:\ 学习笔记\SPI-4.2 协议详解.doc - 1 - 创建时间: 2011-5-27 21:53:00田园风光书屋NB0005 v1.1 SPI-4.2 协议详解SPI-4.2 是一种物理层和链路层之间的支持多通道的数据包传输协议,其系统参考模型如上图所示,从链路层至物理层的数据方向,称为“发送”方向,从物理层至链路层的数据方向,称为“接收”方向。在两个方向上,都存在着流控机制。值得注意的是, SPI-4.2 是一种支持多通道( Port)的传输协议。一个通道,指接收或发送方向上,相互传输数据的一对关联的实体。有很多对关联的实体,即很多个通道,都在同时传输数据,它们可复用SPI 总线。最多可支持256 个通道。例如OC-192 的192 个STS-1 通道,快速以太网中的100 个通道等, 各个通道的数据都可以相互独立地复用在SPI总线上传输。

    标签: SPI-4.2协议

    上传时间: 2022-06-19

    上传用户:

  • 基于LabVIEW的ARM Cortex-M3嵌入式开发宝典

    基于LabVIEW的ARM Cortex-M3嵌入式开发宝典电子书内容简介第 1 篇 软件篇1.1 LabVIEW Embedded Module for ARM Microcontrollers 模块介绍1.2 Keil RealView MDK 软件介绍1.3 Keil RTX 实时操作系统介绍1.4 LabVIEW ARM Module 软件架构1.5 LabVIEW ARM Module、RealView MDK、实验平台驱动软件安装1.6 STM32 实验范例查找与 USB JLink-OB 驱动加载第 2 篇 硬件篇2.1 ARM Cortex-M3 内核简介2.2 实验平台介绍2.2.1 STM32 Starter Board(学习板)介绍2.2.2 STM32 Core Board(核心板)介绍2.2.3 STM32 DAQ Board(数采板)介绍 2.3 实验平台资源说明2.3.1 STM32 Starter Board 资源简介2.3.2 STM32 Core Board 资源简介2.3.3 STM32 DAQ Board 资源简介2.4 My_ARM 实验平台总结与展望第 3 篇 基础模块篇(附原理图)3.1.1 GPIO 介绍3.1.2 GPIO 工作原理3.1.3 GPIO 驱动实现3.1.4 GPIO 两种驱动方式比较3.1.5 GPIO 总结3.2 ADC/DAC3.2.1 ADC 介绍3.2.2 ADC 驱动实现3.2.3 DAC 介绍3.2.4 DAC 驱动实现3.3 中断(60 线)3.3.1 外部中断(19 线)3.3.1.1 外部 I/O 中断(GPIO:16 线)3.3.1.2 外部特定中断(PVD、RTC、USB:3 线)3.3.2 外部中断的驱动实现3.3.3 定时器中断(TIM2~TIM5、TIM6、TIM7、TIM1、TIM8)3.3.3.1 基本定时器中断 3.3.3.2 通用定时器中断3.3.3.3 高级定时器中断3.3.4 定时器中断驱动实现3.3.4.1 更新中断驱动实现3.3.4.2 输入测量驱动实现3.3.4.3 编码器驱动实现3.4 PWM 生成3.4.1 PWM 原理、应用3.4.2 PWM 驱动实现3.4.3 PWM 设置技巧3.5 看门狗3.5.1 独立看门狗(IWDG)介绍3.5.2 独立看门狗驱动实现3.5.3 窗口看门狗(WWDG)介绍3.5.4 窗口看门狗驱动实现3.6 TFTLCD 显示、触摸屏操作、OLED 显示3.6.1 TFTLCD 工作原理3.6.2 TFTLCD 显示驱动实现3.6.3 触摸屏工作原理3.6.4 触摸屏驱动实现3.6.5 OLED 工作原理3.6.6 OLED 驱动实现.............

    标签: labview arm cortex-m3 嵌入式

    上传时间: 2022-07-17

    上传用户:

  • LwIP协议栈源码详解.

    最近一个项目用到LWIP,恰好看到网上讨论的人比较多,所以有了写这篇学习笔记的冲动,一是为了打发点发呆的时间,二是为了吹过的那些NB往往决定做一件事是简单的,而坚持做完这件事却是漫长曲折的,但终究还是写完了,时间开销大概为四个月,内存开销无法估计。。这篇文章覆盖了LWIP协议大部分的内容,但是并不全面。它主要讲解了LWIP协议最重要也是最常被用到的部分,包括内存管理,底层网络接口管理,ARP层,IP层,TCP层,API层等,这些部分是LWIP的典型应用中经常涉及到的。而LWIP协议的其他部分,包括UDPDHCP,DNS,IGMP,SNMP,PP等不具有使用共性的部分,这篇文档暂时未涉及。原来文章是发在空间中的,每节每节依次更新,后来又改发为博客,再后来就干脆懒得发了。现在终于搞定,于是将所有文章汇总。绞尽脑汁的想写一段空前绝后,人见人爱的序言,但越写越觉得像是猫儿抓的一样。就这样,PS:由于本人文笔有限,情商又低,下里巴人一枚,所以文中的很多语句可能让您很纠结,您可以通过邮箱与我联系。共同探讨才是进步的关键。

    标签: lwip

    上传时间: 2022-08-09

    上传用户: