2-如何查看技术手册

回顾:
   开发板烧写实验
     cpu:              SEC_S5P6818X_Users_Manual_preliminary_Ver_0.00.pdf

LED驱动程序开发

1、电路原理图
   底板:x6818bv2.pdf
       结论,如果让LED1亮或者灭
             其实就是让导线GPIOC12出现低电平或者高电平
   核心板:x4418cv3_release20150713.pdf
        搜索 “GPIOC12”
        导线"GPIOC12"连接到了CPU W15管脚上了
       结论,其实控制LED1的亮灭
             实则就是控制cpu上的W15管脚出现低/高电平
   问题:如何编程控制W15管脚上出现高电平或者低电平?
         答案应该去cpu datasheet中找
2、cpu datasheet
   P68:
       w15管脚的可选功能1
   该cpu上有160个GPIO管脚
   
   GPIOCALTFN0 : 0xc001c020
       [25:24], 01 配置为可选功能1(输入输出功能)
   GPIOCOUTENB:  0xc001c004
       [12]     1,  选择输出功能
   GPIOCOUT:     0xc001c000
       [12]     1/0  输出高/低电平
3、C语言回顾
  3.1 指针
      常数:0xc001c020
      地址:(unsigned int *)0xc001c020
      读其中内容 :*((unsigned int *)0xc001c020)
      写入内容: *((unsigned int *)0xc001c020) =100  

      访问特殊功能寄存器的标准写法      
            *((volatile unsigned int *)0xc001c020)
      volatile的作用?使用场合?
         防止编译器的过度优化
  3.2位操作    
      //错误的
      *((volatile unsigned int *)0xc001c020)= 0x01000000
      //有BUG 假如该寄存器原来bit25=1
      *((volatile unsigned int *)0xc001c020)|= 0x01000000
      
      //将24 25bit清0      
      *((volatile unsigned int *)0xc001c020)&= 0xfcffffff
      //将24bit置1
      *((volatile unsigned int *)0xc001c020)|= 0x01000000

      //标准写法
      *((volatile unsigned int *)0xc001c020)&= ~(3<<24);
      *((volatile unsigned int *)0xc001c020)|= (1<<24);
4、编辑程序

5、编译程序
  5.1 安装交叉编译工具
     sudo chmod 777 /opt/ -R
     cp /home/tarena/workdir/arm-linux-gcc/arm-cortex_a9-eabi-4.7-eglibc-2.18.tar.gz /opt/
     cd /opt
     tar xf arm-cortex_a9-eabi-4.7-eglibc-2.18.tar.gz   
     vi ~/.bashrc
        export PATH=$PATH:/opt/arm-cortex_a9-eabi-4.7-eglibc-2.18/bin/
     source /home/tarena/.bashrc
     arm-cortex_a9-linux-gnueabi-gcc -v
   5.2 编译led.c
     1)arm-cortex_a9-linux-gnueabi-gcc -c led.c -o led.o -nostdlib
     2)arm-cortex_a9-linux-gnueabi-ld -nostdlib -nostartfiles -Ttext=0x48000000 -eled_test led.o -o led.elf
     3)arm-cortex_a9-linux-gnueabi-objcopy -O binary led.elf led.bin  
6、运行程序
   cp led.bin /tftpboot/

   在开发板上执行:
      tftp 0x48000000 led.bin
      go 0x48000000

   

猜你喜欢

转载自blog.csdn.net/YIZIMU/article/details/81213338