精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

測試新唐nuc980串口功能的過程

CHANBAEK ? 來源:嵌入式學習和實踐 ? 作者:嵌入式學習和實踐 ? 2023-09-04 16:07 ? 次閱讀

測試新唐nuc980串口功能的過程,如下:

  1. 直接下載使用官方的ubuntu系統。
  2. 直接使用官方的文件,在家目錄下 NUC970_Buildroot 目錄下或者自己git clone NUC970_Buildroot 工程也可以,克隆地址如下:
git clone https://github.com/OpenNuvoton/NUC970_Buildroot
或者
git clone https://gitee.com/OpenNuvoton/NUC970_Buildroot.git
  1. 查看配置文件 ls configs/* ,會顯示當前的配置文件,我們選擇輸入 make nuvoton_nuc980_iot_defconfig ,產生預設的configuration file,預設的configuration 會聯網安裝U-Boot、Linux Kernel、root file system、toolchain ....... 等常用的工具。如果想修改預設的 configuration ,輸入 make menuconfig ,進入配置界面進行配置。

4.輸入 **make ** ,開始進行 Compile ,成功后 NUC980 BSP 相關的文件就會出現在NUC970_Buildroot目錄下面的output 這個子目錄。如下:

圖片

  1. NUC970_Buildroot 文件夾下輸入 sudo ./install_nuc980_bsp.sh , 安裝下載nuc980bsp包。執行完腳本,會出現 nuc980bsp 文件夾。

圖片

  1. 自行編譯nuc980bsp包中的測試例程uart的demo,或者按照如下代碼編寫即可。編譯uart 文件,將生成的可執行文件uart_demo,復制到NUC970_Buildroot/output/target/usr/bin。
/****************************************************************************
 *                                                                          *
 * Copyright (c) 2014 Nuvoton Technology Corp. All rights reserved.         *
 *                                                                          *
 ****************************************************************************/

/****************************************************************************
 * 
 * FILENAME
 *     uart_test.c
 *
 * VERSION
 *     1.0
 *
 * DESCRIPTION
 *     This is the test program used to test the UARTs on NUC980 EV board
 *
 * DATA STRUCTURES
 *     None
 *
 * FUNCTIONS
 *     None
 *
 * HISTORY
 *     
 *
 * REMARK
 *     None
 ****************************************************************************/
#include     < stdio.h >
#include     < stdlib.h >
#include     < unistd.h > 
#include     < sys/types.h > 
#include     < sys/stat.h > 
#include     < fcntl.h > 
#include     < termios.h >  
#include     < errno.h >
#include     < string.h >
#include   < signal.h >
#include    < pthread.h >


#define FALSE 0
#define TRUE  1


int fd[2];


pthread_t threads[10];


char buff[101];


static struct termios newtios,oldtios; /*termianal settings */
static int saved_portfd=-1;            /*serial port fd */




static void reset_tty_atexit(void)
{
  if(saved_portfd != -1)
  {
    tcsetattr(saved_portfd,TCSANOW,&oldtios);
  } 
}


/*cheanup signal handler */
static void reset_tty_handler(int signal)
{
  if(saved_portfd != -1)
  {
    tcsetattr(saved_portfd,TCSANOW,&oldtios);
  }
  _exit(EXIT_FAILURE);
}


static int open_port(const char *portname)
{
  struct sigaction sa;
  int portfd;


  printf("opening serial port:%sn",portname);
  /*open serial port */
  if((portfd=open(portname,O_RDWR | O_NOCTTY)) < 0 )
  {
       printf("open serial port %s fail n ",portname);
       return portfd;
  }


  /*get serial port parnms,save away */
  tcgetattr(portfd,&newtios);
  memcpy(&oldtios,&newtios,sizeof newtios);
  /* configure new values */
  cfmakeraw(&newtios); /*see man page */
  newtios.c_iflag |=IGNPAR; /*ignore parity on input */
  newtios.c_oflag &= ~(OPOST | ONLCR | OLCUC | OCRNL | ONOCR | ONLRET | OFILL); 
  newtios.c_cflag = CS8 | CLOCAL | CREAD;
  newtios.c_cc[VMIN]=1; /* block until 1 char received */
  newtios.c_cc[VTIME]=0; /*no inter-character timer */
  /* 115200 bps */
  cfsetospeed(&newtios,B115200);
  cfsetispeed(&newtios,B115200);
  /* register cleanup stuff */
  atexit(reset_tty_atexit);
  memset(&sa,0,sizeof sa);
  sa.sa_handler = reset_tty_handler;
  sigaction(SIGHUP,&sa,NULL);
  sigaction(SIGINT,&sa,NULL);
  sigaction(SIGPIPE,&sa,NULL);
  sigaction(SIGTERM,&sa,NULL);
  /*apply modified termios */
  saved_portfd=portfd;
  tcflush(portfd,TCIFLUSH);
  tcsetattr(portfd,TCSADRAIN,&newtios);
  return portfd;
}


void * process1(void* arg)
{
  int portfd = (int) arg;
  unsigned char i, j;
  int rev1, rev2;
  char RxBuffer[101];  


  rev1 =0;
  rev2 =0;


  while(rev2 < 100)
     {
    rev1 = write(portfd,(buff+rev2),100);
    rev2 += rev1;
     }


  printf("n uart1 send %d bytsn", rev2);


  rev1 = 0;
  rev2 = 0;


  while(rev2 < 100)
  {
    rev1 = read(portfd,(RxBuffer+rev2),100);
    rev2 += rev1;
  }

  printf("n uart1 receive %d bytesn", rev2);


  for(i = 0; i < 100; i++)
  {
    if(i != RxBuffer[i])
    {
      printf("n uart1 compare Error!!");

      while(1);
    }
  }


  printf("n uart1 compare correct!!n");
  printf("n uart1 test done!!n");


}  


void * process2(void* arg)
{
  int portfd = (int) arg;
  unsigned char i, j;
  int rev1, rev2;
  char RxBuffer[101];


  rev1 =0;
  rev2 =0;


  while(rev2 < 100)
     {
    rev1 = write(portfd,(buff+rev2),100);
    rev2 += rev1;
     }


  printf("n uart2 send %d bytes n", rev2);


  rev1 = 0;
  rev2 = 0;


  while(rev2 < 100)
  {
    rev1 = read(portfd,(RxBuffer+rev2),100);
    rev2 += rev1;
  }

  printf("n uart2 receive %d bytes n", rev2);


  for(i = 0; i < 100; i++)
  {
    if(i != RxBuffer[i])
    {
      printf("n uart2 compare Error!!");
      while(1);
    }
  }


  printf("n uart2 compare correct!!n");
  printf("n uart2 test done!!n");


}


/**
*@breif   main()
*/
int main(int argc, char **argv)
{
  char *dev[10]={"/dev/ttyS1", "/dev/ttyS2"};
  unsigned int i;


  printf("n demo uart1/uart2 external loop back function n");


  for(i = 0; i < 100; i++)
  {
    buff[i] = (i & 0xff);
  }




  for(i = 0; i < 2; i++)
  {
    if((fd[i] = open_port(dev[i]))< 0)
         return -1;
  }

  pthread_create(&threads[0], NULL, process1, (void*)(fd[0]));
  pthread_create(&threads[1], NULL, process2, (void*)(fd[1]));


  pthread_join(threads[0], NULL);
  pthread_join(threads[1], NULL);



  return 0;
}
  1. 再NUC970_Buildroot 執行 make linux-menuconfig ,打開串口1和串口2的驅動使能,保存后退出。

圖片

8.輸入 **make **編譯。

9.編譯完之后,拷貝相關文件,共四個文件

拷貝 NUC970_Buildroot/output/images 文件夾下的 **uImage **文件;

拷貝 NUC970_Buildroot/output/build/uboot-master 文件夾下的u-boot.bin 文件 ;

拷貝 NUC970_Buildroot/output/build/uboot-master/spl 文件夾下的u-boot-spl.bin 文件;

拷貝 NUC970_Buildroot 文件夾下的 env.txt 文件。這里在 NUC970_Buildroot 文件夾下 未發現env.txt,從別的地方拷貝一份即可。env.txt的內容如下:

baudrate=115200
bootdelay=1
stderr=serial
stdin=serial
stdout=serial
setspi=sf probe 0 30000000
loadkernel=sf read 0x7fc0 0x200000 0x800000
bootcmd=run setspi;run loadkernel;bootm 0x7fc0

10.選擇boot啟動方式,上電進行鏡像下載,(參考: 新唐Nuc980學習筆記1 - 工程創建和下載

u-boot-spl.bin 選擇Loader默認Image execute address:0x 200 ;下載即可

u-boot.bin 選擇 Data下載到 Image start offset: 0x 100000 ; 下載即可

uImage選擇Data下載到 Image start offset: 0x 200000 ; 下載即可

**env.txt **選擇 Environment下載到 Image start offset: 0x 80000 ; 下載即可

圖片

11.選擇boot啟動方式,復位運行(參考: 新唐Nuc980學習筆記1 - 工程創建和下載

12.開機之后的畫面如下:

圖片

13.輸入測試指令 ./usr/bin/uart_demo,可看到串口功能測試符合預期,測試結果如下:

圖片

注意:

【 以下動作只需要在更新 Buildroot 工具時使用 】
進入Buildroot 資料夾后請輸入以下指令:
git reset --hard
git pull
更新完成后進入 dl 資料夾,先將既有的 linux kernel 與 u-boot 刪除,并輸入以下指令:
sudo rm -rf linux-master.tar.gz
輸入密碼 user,并輸入以下指令:
sudo rm -rf uboot-master.tar.gz
離開 dl 資料夾,進入 Builroot 資料夾下 make clean。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5071

    文章

    19026

    瀏覽量

    303497
  • 串口
    +關注

    關注

    14

    文章

    1547

    瀏覽量

    76229
  • Ubuntu
    +關注

    關注

    5

    文章

    560

    瀏覽量

    29586
  • 新唐
    +關注

    關注

    0

    文章

    131

    瀏覽量

    14196
  • nuc980
    +關注

    關注

    0

    文章

    4

    瀏覽量

    1252
收藏 人收藏

    評論

    相關推薦

    nuc980雙網卡開機啟動

    nuc980雙網卡開機啟動
    的頭像 發表于 12-07 18:25 ?1408次閱讀
    <b class='flag-5'>nuc980</b>雙網卡開機啟動

    NUC980怎么把Uboot和kernel的輸出改到其它串口

    使用的NUC980官方固件 板子只引出了PA1和PA0 沒有把UART0引出 請問應該怎么把Uboot和kernel的輸出改到其它串口
    發表于 01-17 06:52

    基于NUC980開發板DIY的項目合集

    NUC980有非常豐富的外設資源,串口有10個,可以擴展出多個485接口,還有128M內存,用于多任務運行。DIY過程首先畫了一個板子:通過arduino接口擴展了2個485和2個can,can與本次
    發表于 05-07 15:22

    NUC980IOT使用測評相關資料分享

    1、NUC980測評快速上手與GPIONUC980是新科技32位Cortex-A系列內核產品,NUC980IOT所使用的芯片為NUC980DK61
    發表于 06-02 14:56

    NUC980開發板DIY項目大挑戰合集

    1、基于NUC980的4G、wifi、網的物聯網網關項目開發項目描述目前工業控制和工業現場的數據采集與遠程控制多還是使用串口類接口進行現場通信,而nuc980提供10個
    發表于 06-08 14:32

    求一種基于NUC980開發板的數據采集網關設計方案

    1、基于NUC980開發板的數據采集網關設計新NUC980系列MPU有高達300 MHz 的執行速度和內嵌最高 128 MB DRAM及豐富的周邊,現在又搭載上了RT-Thread OS以及
    發表于 06-13 18:08

    NUC980測評快速上手與GPIO

    ,首先介紹一下板子上的兩個端口,兩個microusb分別為NUWriter的下載與普通串口,所以基本上一根線就可以滿足譬如GPIO的測評。1.板載GPIO介紹NUC980是新科技3
    發表于 10-17 15:55

    請教nuc980如何實現在線升級

    請教,nuc980 如何實現在線升級,是通過u-boot升級嗎,應該怎么配置u-boot,升級包要放在哪里?第一次用nuc980,不會linux
    發表于 10-28 10:16

    請問nuc980如何在裸機程序中實現nuc980軟件復位?

    nuc980如何在裸機程序中實現nuc980軟件復位?
    發表于 06-13 08:21

    請問nuc980如何在裸機程序中實現nuc980軟件復位?

    nuc980如何在裸機程序中實現nuc980軟件復位?
    發表于 09-04 08:22

    科技NuMaker NUC980 主板介紹

    Linux 工業網絡控制開發平臺 新科技提供工業網絡控制開發平臺采用 NUC980DK61Y 微處理器,此為一套工業用網絡控制開發平臺,完整的硬件設計與軟件參考設計。包含了新執行速度300
    的頭像 發表于 01-13 10:13 ?9427次閱讀
    新<b class='flag-5'>唐</b>科技NuMaker <b class='flag-5'>NUC980</b> 主板介紹

    科技NUC980 工業控制物聯網系列介紹

    NUC980 系列采用 ARM926EJ-S 核心,執行速度高達 300 MHz,堆棧 16 MB、64 MB 或 128 MB DDR-II 內存于同一封裝,提供 64-pin、128-pin
    的頭像 發表于 02-05 09:17 ?4128次閱讀
    新<b class='flag-5'>唐</b>科技<b class='flag-5'>NUC980</b> 工業控制物聯網系列介紹

    NUC980規格書

    NUC980規格書(嵌入式開發工程師工資水平)-新科技ARM9 系列 NUC980產品手冊
    發表于 07-30 12:58 ?27次下載
    新<b class='flag-5'>唐</b><b class='flag-5'>NUC980</b>規格書

    NUC980 DIY項目大挑戰 - EtherCAT實現

    ,就準備上個RTOS,以前M3和M4的芯片,主要用FreeRTOS,最近也開始用RT-Thread。新官方也推出了NUC980的RT
    的頭像 發表于 02-02 11:30 ?2011次閱讀

    NUC980 Chili平臺可提供邊緣運算(Edge Computing)遠程監控的管理解決方案

    NUC980 Chili平臺可提供邊緣運算(Edge Computing)遠程監控的管理解決方案
    的頭像 發表于 08-10 11:00 ?643次閱讀
    新<b class='flag-5'>唐</b><b class='flag-5'>NUC980</b> Chili平臺可提供邊緣運算(Edge Computing)遠程監控的管理解決方案