微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > demo例程一举攻克

demo例程一举攻克

时间:10-02 整理:3721RD 点击:
今天继续和大家分享一下demo例程学习过程中的心得。
例程实验准备工作:
1、创龙AM4379開發板一台
2、網線一根
3、miniusb轉USB串口線一根
4、裝有虛擬機的PC一台
5、secureCRT軟件

一、helloworld应用例程演示
说到程序显示,程序猿们对helloworld应该最熟悉不过了,通过前面的例程提到的nfs環境的搭建,我們可以直接在開發板系統下運行共享的虛擬機程序,這樣就省去了copy到板子的步驟了。
1、执行以下命令挂载 nfs 服务器共享目录到开发板的/nfs 目录
mount -t nfs -o nolock 192.168.100.60:/home/am437 /nfs
2、執行虛擬機中共享的app\helloworld文件夾下的helloworld文件


可以看到執行命令后,串口有返回打印信息
二、LED测试
硬件電路如圖:


LED控制目录在"sys/calss/leds"目录下,对应关系如下:
D8(GPIO5[10]):user_led0
D9(GPIO5[11]):user_led1
D10(GPIO5[12]):user_led2
D11(GPIO5[13]):user_led3
控制相應的命令即可控制LED的亮滅,如圖:


echo 0 >/sys/class/leds/user-led0/brightness,打開/brightness文件可看到內容為0,燈滅
echo 1 > /sys/class/leds/user-led0/brightness,打開/brightness文件可看到內容為1,燈亮
如圖:


顯然,這裡將對寄存器的操作簡化為函數式操作,簡單的寫0/1即可,省去了研究寄存器的苦惱。
串口端可以操作單個led也可以操作多個led,如流水灯点亮的實現
執行:在app\led\led_loop.sh下的 ./led_loop.sh,可看到led燈輪流亮滅,為何一個腳本就可以有如此結果呢,打開腳本一探究竟,如圖:

  1. #init all leds
  2. echo 0 > /sys/class/leds/user-led0/brightness
  3. echo 0 > /sys/class/leds/user-led1/brightness
  4. echo 0 > /sys/class/leds/user-led2/brightness
  5. echo 0 > /sys/class/leds/user-led3/brightness

  6. DELAY_TIME=1

  7. #led loop
  8. while true; do
  9.     echo 1 > /sys/class/leds/user-led0/brightness
  10.     sleep $DELAY_TIME
  11.     echo 0 > /sys/class/leds/user-led0/brightness
  12.     echo 1 > /sys/class/leds/user-led1/brightness
  13.     sleep $DELAY_TIME
  14.     echo 0 > /sys/class/leds/user-led1/brightness
  15.     echo 1 > /sys/class/leds/user-led2/brightness
  16.     sleep $DELAY_TIME
  17.     echo 0 > /sys/class/leds/user-led2/brightness
  18.     echo 1 > /sys/class/leds/user-led3/brightness
  19.     sleep $DELAY_TIME
  20.     echo 0 > /sys/class/leds/user-led3/brightness
  21. done

复制代码

可以看到,腳本先是讓所有燈滅,設定延時為1S,然後點亮一個燈,延時后,先滅掉上一個再點亮下一個,其實就是led測試命令的組合,這里我們將DELAY_TIME設為不同的值將會看到不同的結果。
這裡的maxbrightness值為255,應該是表示亮度的意思,但是怎麼修改值都不變,還有待去研究一下,如圖:



按理說 亮度應該也是可以調節的。
三、按键测试
开发板底板上有2个普通用户按键KEY0和KEY1,另外一个NMI是非屏蔽中断按键。
硬件電路圖如下:


1、運行app\button\button_test下的app\button\button_test,如圖:


2、分别按下KEY0、KEY1,未出現打印信息
明天有時間用萬用表測量一下電平對不對
程序如下:

  1. #include <stdlib.h>
  2. #include <unistd.h>
  3. #include <fcntl.h>
  4. #include <linux/input.h>

  5. int main(int argc, char **argv)
  6. {
  7.         int key_state;
  8.         int fd;
  9.         int ret;
  10.         int code;

  11.         struct input_event buf;

  12.         fd = open("/dev/input/event2", O_RDONLY);

  13.         if (fd < 0) {
  14.                 printf("Open Gpio_Keys failed!\n");
  15.                 return -1;
  16.         }

  17.         printf("Open Gpio_Keys successed!\n");

  18.         while(1) {
  19.                 ret = read(fd, &buf, sizeof(struct input_event));
  20.                 if (ret <= 0) {
  21.                         printf("read failed!\n");
  22.                         return -1;
  23.                 }

  24.                 code = buf.code;
  25.                 key_state = buf.value;

  26.                 switch(code)
  27.                 {
  28.                         case KEY_PROG1:
  29.                                 code = '5';
  30.                         break;
  31.                         case KEY_PROG2:
  32.                                 code = '6';
  33.                         break;
  34.                 }

  35.                 if(code != 0)
  36.                         printf("SW%c %s\n", code, key_state ? "down" : "up");
  37.         }

  38.         printf("Key test finished.\n");

  39.         close(fd);

  40.         return 0;
  41. }

复制代码


四、串口启动测试
1、 开发板上启动方式选择为:UART0,拨码开关选择为:11010(5~1)。
2、硬件電驢如圖:


3、打開串口终端,会一直打印"cccccccccc"。如下
所示:


先寫到這吧  困死了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top