×
嵌入式 > 嵌入式开发 > 详情

OK6410裸机程序---leds

发布时间:2020-08-06 发布时间:
|
今天写一下OK6410裸机中的led灯,led是差不最简单的裸机驱动了吧。详细的说一下,以便梳理自己的知识。

我们首先看一下OK6410的LED连接图:

其中NLED1234,和s3c6410的GPIO引脚相连,如图:

其实LED发光的原理很简单的,就是把LED连接到s3c6410的GPIO引脚,通过改变s3c6410的GPIO上的电平来控制LED发光。

这样的话就很清楚了,我们来看下s3c6410 datasheet上关于GPIO引脚的设置:

首先是GPMCON寄存器:

因为我们要控制GPIO的电平,所以要把对应的GPIO引脚设置为Output,即:0001

像我们这个就是:GPMCON &=0xffff fff1;

把这个引脚设置好后,我们可以通过改变GPMDAT的值来改变引脚上的电平。下面是GPMDAT:

可以看出来我们只要把对应的位设置为0或1,就可以控制LED了。简单吧?

下面看下源程序:

  1. void(*printf)(char*,...)=0xc7e11650;
  2. #defineGPMCON(*(unsignedlongvolatile*)0x7F008820)
  3. #defineGPMDAT(*(unsignedlongvolatile*)0x7F008824)
  4. #defineGPMPUD(*(unsignedlongvolatile*)0x7F008828)
  5. /*
  6. *NLED1GPM0
  7. *NLED2GPM1
  8. *NLED3GPM2
  9. *NLED4GPM3
  10. */
  11. voidset_gpio(void);
  12. voidudelay();
  13. intmain(void)
  14. {
  15. set_gpio();
  16. printf("%2x/n",GPMDAT);
  17. GPMDAT=0x00;
  18. inti;
  19. while(1){
  20. for(i=0;i<=3;i++)
  21. {
  22. GPMDAT=(1<
  23. udelay();
  24. }
  25. }
  26. return0;
  27. }
  28. /*
  29. *delay
  30. */
  31. voidudelay()
  32. {
  33. unsignedlongi=0;
  34. for(i=0;i<1000000;i++);
  35. }
  36. voidset_gpio(void)
  37. {
  38. GPMCON&=0xffff1111;
  39. }

这样,leds就交替亮了。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
五大标准轻松搞定4K超高清电视选购