查看: 3833|回复: 2

SAM4的USART_SPI模式

[复制链接]
  • TA的每日心情
    奋斗
    2015-10-5 14:38
  • 签到天数: 175 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-4-17 02:46:12 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 强仔00001 于 2015-4-17 09:26 编辑

    今天在看文档时注意到USART还支持SPI模式,然后立马撸起代码,把GUI的部分的SPI改成了USARTSPI模式,并且成功了。如官方的手册的USART特性说明:
    QQ截图20150417005055.png
    可以看出USART的功能很强大,注意到了红色方框的内容,说明了USART支持SPI模式。最大的频率只能到达MCK(系统主时钟的6分频),假如单片机主频MCK120MSPI的速率最大也就是20M。在SAM4中有3SPI模块,分别是一个SPI,两个USART下的SPI模式,分别由USART0USART1产生。下图是USART的功能模块图,可以看出功能强大。
    QQ截图20150417005214.png
    SAM4SUSART0USART1的管脚分布情况如下表:
    QQ截图20150417005240.png
    USARTSPI管脚的对应图标,大家不要看错呀,masterslave下的管脚对应情况是有所不同的。如下图标:
    QQ截图20150417011229.png
    SPI的四种模式如下图:这四种模式选择要根据你所要通信的器件所支持的方式而选择。
    QQ截图20150417005740.png
    四种方式的时序图:
    QQ截图20150417005823.png
    我这次也是使用了AtmelASF库的函数来进行程序的设计。
    总的来说,分这几部走:
    1)管脚的配置部分:把管脚设置为USART模式,代码如下:
    gpio_configure_pin(PIO_PA22_IDX,(PIO_PERIPH_A | PIO_DEFAULT));
    gpio_configure_pin(PIO_PA23_IDX,(PIO_PERIPH_A | PIO_DEFAULT));
    2USART_SPI的参数配置,代码如下:
    usart_spi_init(USART1);//初始化SPI,主要是使能USART的时钟
    //设置SPI的传输数据的模式和频率,这里我设置到最大20M,单片机的主频为120M
    usart_spi_setup_device(USART1,&USART_SPI_DEVICE_EXAMPLE,SPI_MODE_0, 20000000, 0);
    usart_spi_enable(USART1);//使能SPI
    TFT屏幕的底层SPI驱动的修改:
    这是之前的SPI(非USART的)驱动:
    uint8_t SPI_WriteByte(uint8_t Byte)
    {
      struct spi_device device = {.id = SSD1306_CS_PIN};
      spi_select_device(SSD1306_SPI, &device);
      spi_write_single(SPI, Byte);
      spi_deselect_device(SSD1306_SPI, &device);
    }
    这是现在的USART_SPIUSART的)驱动:
    uint8_t SPI_WriteByte(uint8_t Byte)
    {
      buffer[0] = Byte;
      usart_spi_write_packet(USART1, buffer, 1);

    }
    这次启用了GUI的窗体功能,要想打开窗体功能,就要配置下GUIConf.h文件。
    把一下这句:
    #define GUI_WINSUPPORT            0 /* Window manager package available */
    改为:
    #define GUI_WINSUPPORT            1 /* Window manager package available */
    代码从网上找的:



    1. struct usart_spi_device USART_SPI_DEVICE_EXAMPLE = {
    2.         /* Board specific select ID. */
    3.         .id = 1
    4. };

    5. int main(void)
    6. {


    7.         // Initialize clocks.
    8.         sysclk_init();

    9.         // Initialize GPIO states.
    10.         board_init();


    11.         //初始化USART的SPI模式
    12.         gpio_configure_pin(PIO_PA22_IDX, (PIO_PERIPH_A | PIO_DEFAULT));
    13.         gpio_configure_pin(PIO_PA23_IDX, (PIO_PERIPH_A | PIO_DEFAULT));
    14.         usart_spi_init(USART1);
    15.         usart_spi_setup_device(USART1, &USART_SPI_DEVICE_EXAMPLE,SPI_MODE_0, 20000000, 0);
    16.         usart_spi_enable(USART1);
    17.         

    18.         
    19.          const char  FRAM[]={"Assistant  Of  The  Car"};
    20.           const char  button[]={"START"};
    21.           const char  button1[]={"STOP"};
    22.           const char  button2[]={"RESET"};
    23.           const char  button3[]={"SEND_MOD"};
    24.           const char  button4[]={"RECE_MOD"};
    25.           const char  button5[]={"-"};
    26.           const char  button6[]={"+"};
    27.           const char  Text[]={"AD1"};
    28.           const char  Text1[]={"AD2"};
    29.           const char  Text2[]={"AD3"};
    30.           const char  Text3[]={"AD4"};
    31.           const char  Text4[]={"duty ratio"};
    32.           const char  Text5[]={"P"};
    33.           const char  Text6[]={"I"};
    34.           const char  Text7[]={"D"};
    35.         BUTTON_Handle    Button[11];//°′?¥???t
    36.         PROGBAR_Handle   ProgBar[4];//???èì????t
    37.         EDIT_Handle      Edit[10];//±à? ???t
    38.         TEXT_Handle      text[10];//??±????t
    39.         FRAMEWIN_Handle FramWin;
    40.         SLIDER_Handle    Slide[4];//???ˉ???t
    41.         GUI_Init();
    42.           WM_Init();
    43.         GUI_SetBkColor(GUI_BLACK);
    44.         GUI_Clear();//???á
    45.           FramWin=FRAMEWIN_Create(FRAM,0,WM_CF_SHOW,10,10,300,230);
    46.           FRAMEWIN_SetActive(FramWin,1);//?¤???a???ò?ü
    47.           //Text=TEXT_Create(60,60,80,80,4,WM_CF_SHOW,bb,TEXT_CF_LEFT);
    48.           GUI_Exec();
    49.           //WM_SetDesktopColor(GUI_BLACK);//éè??×à??μ???é?
    50.           Button[0]=BUTTON_Create(20,30,40,20,1,WM_CF_SHOW);
    51.           BUTTON_SetBkColor(Button[0],1,GUI_BLUE);//éè??°′?¥°′??ê±μ???é?
    52.           BUTTON_SetText(Button[0],button);//°′?¥1
    53.           Button[1]=BUTTON_Create(70,30,40,20,2,WM_CF_SHOW);
    54.           BUTTON_SetBkColor(Button[1],1,GUI_BLUE);//éè??°′?¥°′??ê±μ???é?
    55.           BUTTON_SetText(Button[1],button1);//°′?¥2
    56.           Button[2]=BUTTON_Create(120,30,40,20,3,WM_CF_SHOW);
    57.           BUTTON_SetBkColor(Button[2],1,GUI_BLUE);//éè??°′?¥°′??ê±μ???é?
    58.           BUTTON_SetText(Button[2],button2);//°′?¥3
    59.         Button[3]=BUTTON_Create(170,30,60,20,4,WM_CF_SHOW);
    60.           BUTTON_SetBkColor(Button[3],1,GUI_BLUE);//éè??°′?¥°′??ê±μ???é?
    61.           BUTTON_SetText(Button[3],button3);//°′?¥3
    62.         Button[4]=BUTTON_Create(240,30,60,20,5,WM_CF_SHOW);
    63.           BUTTON_SetBkColor(Button[4],1,GUI_BLUE);//éè??°′?¥°′??ê±μ???é?
    64.           BUTTON_SetText(Button[4],button4);//°′?¥3
    65.         GUI_Exec();
    66.         text[0]=TEXT_Create(20,60,20,20,6,WM_CF_SHOW,Text,TEXT_CF_LEFT);
    67.         Edit[0]=EDIT_Create(40,60,35,20,7,4,WM_CF_SHOW);
    68.         EDIT_SetDecMode(Edit[0],0,0,5000,0,0);
    69.         text[1]=TEXT_Create(80,60,20,20,8,WM_CF_SHOW,Text1,TEXT_CF_LEFT);
    70.         Edit[1]=EDIT_Create(100,60,35,20,9,4,WM_CF_SHOW);
    71.         EDIT_SetDecMode(Edit[1],0,0,5000,0,0);
    72.         text[2]=TEXT_Create(140,60,20,20,10,WM_CF_SHOW,Text2,TEXT_CF_LEFT);
    73.         Edit[2]=EDIT_Create(160,60,35,20,11,4,WM_CF_SHOW);
    74.         EDIT_SetDecMode(Edit[2],0,0,5000,0,0);
    75.         text[3]=TEXT_Create(200,60,20,20,12,WM_CF_SHOW,Text3,TEXT_CF_LEFT);
    76.         Edit[3]=EDIT_Create(220,60,35,20,13,4,WM_CF_SHOW);
    77.         EDIT_SetDecMode(Edit[3],0,0,5000,0,0);
    78.           GUI_Exec();
    79.           text[4]=TEXT_Create(20,90,70,20,12,WM_CF_SHOW,Text4,TEXT_CF_LEFT);
    80.         Button[5]=BUTTON_Create(95,90,15,20,1,WM_CF_SHOW);
    81.           BUTTON_SetBkColor(Button[5],1,GUI_BLUE);//éè??°′?¥°′??ê±μ???é?
    82.           BUTTON_SetText(Button[5],button5);//°′?¥1
    83.         ProgBar[0]=PROGBAR_Create(115,90,150,20,WM_CF_SHOW);
    84.         PROGBAR_SetBarColor(ProgBar[0],0,GUI_BLUE);
    85.         PROGBAR_SetBarColor(ProgBar[0],1,GUI_RED);
    86.         PROGBAR_SetValue(ProgBar[0],10);
    87.         Button[6]=BUTTON_Create(270,90,15,20,1,WM_CF_SHOW);
    88.         BUTTON_SetText(Button[6],button6);//°′?¥1
    89.           GUI_Exec();
    90.         text[5]=TEXT_Create(20,120,15,20,13,WM_CF_SHOW,Text5,TEXT_CF_LEFT);
    91.           Button[7]=BUTTON_Create(40,120,20,20,1,WM_CF_SHOW);
    92.           BUTTON_SetText(Button[7],button5);//°′?¥1
    93.         Slide[0]=SLIDER_Create(65,120,170,20,0,0,WM_CF_SHOW,0);//????×′ì?
    94.         SLIDER_SetRange(Slide[0],0,100);
    95.         SLIDER_SetValue(Slide[0],50);
    96.         SLIDER_SetWidth(Slide[0],5);
    97.         Button[8]=BUTTON_Create(240,120,20,20,1,WM_CF_SHOW);
    98.         BUTTON_SetText(Button[8],button6);
    99.         Edit[4]=EDIT_Create(265,120,35,20,15,3,WM_CF_SHOW);
    100.         EDIT_SetDecMode(Edit[4],0,0,100,0,0);//P

    101.         text[6]=TEXT_Create(20,150,15,20,13,WM_CF_SHOW,Text6,TEXT_CF_LEFT);
    102.           Button[8]=BUTTON_Create(40,150,20,20,1,WM_CF_SHOW);
    103.           BUTTON_SetText(Button[8],button5);//°′?¥1
    104.         Slide[1]=SLIDER_Create(65,150,170,20,0,0,WM_CF_SHOW,0);//????×′ì?
    105.         SLIDER_SetRange(Slide[1],0,100);
    106.         SLIDER_SetValue(Slide[1],50);
    107.         SLIDER_SetWidth(Slide[1],5);
    108.         Button[9]=BUTTON_Create(240,150,20,20,1,WM_CF_SHOW);
    109.         BUTTON_SetText(Button[9],button6);
    110.         Edit[5]=EDIT_Create(265,150,35,20,15,3,WM_CF_SHOW);
    111.         EDIT_SetDecMode(Edit[5],0,0,100,0,0);//I

    112.         text[7]=TEXT_Create(20,180,15,20,13,WM_CF_SHOW,Text7,TEXT_CF_LEFT);
    113.           Button[9]=BUTTON_Create(40,180,20,20,1,WM_CF_SHOW);
    114.           BUTTON_SetText(Button[9],button5);//°′?¥1
    115.         Slide[2]=SLIDER_Create(65,180,170,20,0,0,WM_CF_SHOW,0);//????×′ì?
    116.         SLIDER_SetRange(Slide[2],0,100);
    117.         SLIDER_SetValue(Slide[2],50);
    118.         SLIDER_SetWidth(Slide[2],5);
    119.         Button[10]=BUTTON_Create(240,180,20,20,1,WM_CF_SHOW);
    120.         BUTTON_SetText(Button[10],button6);
    121.         Edit[5]=EDIT_Create(265,180,35,20,15,3,WM_CF_SHOW);
    122.         EDIT_SetDecMode(Edit[5],0,0,100,0,0);//D
    123.         GUI_Exec();
    124.         /*
    125.         GUI_Init();
    126.         GUI_SetBkColor(GUI_RED);
    127.         GUI_Clear();
    128. //        GUI_Delay(10);
    129.         GUI_SetFont(&GUI_Font32B_ASCII);
    130.         //GUI_DispString("Hello World!");        
    131.         GUI_DispString("qiangzai00001\n"
    132.                              "13426742163\n"
    133.                              "963775289\n"
    134.                              "wuyi \n"
    135.                              "jiangmen\n"
    136.                              "chinese\n\n"
    137.                              "www.eeboard.com\n");
    138.         */
    139.        // TFT_Init();
    140.         while (true)
    141.         {
    142.                   
    143.          

    144.         }
    145.         
    146. }
    复制代码
    效果图:
    IMG_20150417_020436.jpg IMG_20150417_020443.jpg IMG_20150417_020458.jpg
    源代码分享:
    SAM4的USART_SPI模式.zip (5.69 MB, 下载次数: 2, 售价: 1 与非币)
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2015-11-14 06:57
  • 签到天数: 382 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-4-17 06:56:24 | 显示全部楼层
    然而,一个小时过去了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-5 14:38
  • 签到天数: 175 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2015-4-17 09:27:22 | 显示全部楼层
    wfnic 发表于 2015-4-17 06:56
    然而,一个小时过去了

    这啥意思??
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-3-28 18:37 , Processed in 0.150398 second(s), 21 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.