【OK210试用体验】3.2 裸机驱动的编写---PWM篇 - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【OK210试用体验】3.2 裸机驱动的编写---PWM篇

中科院 ( 楼主 ) 2015-9-18 19:49:48  只看该作者 倒序浏览
本帖最后由 中科院 于 2015-9-19 10:19 编辑

通过本程序的编写,大家会学习到如何使用S5P210的定时器
先说说芯片基本时钟情况







  1. #define MP0_4CON        (*(volatile unsigned long *)0xE0200340)
  2. #define MP0_4DAT        (*(volatile unsigned long *)0xE0200344)
  3. #define GPD0CON          (*(volatile unsigned long *)0xE02000A0)
  4. #define GPD0DAT                (*(volatile unsigned long *)0xE02000A4)
  5. // clock
  6. #define APLL_LOCK         (*(volatile unsigned long *)0xE0100000)        
  7. #define MPLL_LOCK         (*(volatile unsigned long *)0xE0100008)
  8. #define APLL_CON0         (*(volatile unsigned long *)0xE0100100)
  9. #define APLL_CON1         (*(volatile unsigned long *)0xE0100104)
  10. #define MPLL_CON         (*(volatile unsigned long *)0xE0100108)
  11. #define CLK_SRC0         (*(volatile unsigned long *)0xE0100200)
  12. #define CLK_SRC1         (*(volatile unsigned long *)0xE0100204)
  13. #define CLK_SRC2         (*(volatile unsigned long *)0xE0100208)
  14. #define CLK_SRC3         (*(volatile unsigned long *)0xE010020c)
  15. #define CLK_SRC4         (*(volatile unsigned long *)0xE0100210)
  16. #define CLK_SRC5         (*(volatile unsigned long *)0xE0100214)
  17. #define CLK_SRC6         (*(volatile unsigned long *)0xE0100218)
  18. #define CLK_SRC_MASK0   (*(volatile unsigned long *)0xE0100280)
  19. #define CLK_SRC_MASK1   (*(volatile unsigned long *)0xE0100284)
  20. #define CLK_DIV0         (*(volatile unsigned long *)0xE0100300)
  21. #define CLK_DIV1         (*(volatile unsigned long *)0xE0100304)
  22. #define CLK_DIV2         (*(volatile unsigned long *)0xE0100308)
  23. #define CLK_DIV3         (*(volatile unsigned long *)0xE010030c)
  24. #define CLK_DIV4         (*(volatile unsigned long *)0xE0100310)
  25. #define CLK_DIV5         (*(volatile unsigned long *)0xE0100314)
  26. #define CLK_DIV6         (*(volatile unsigned long *)0xE0100318)
  27. #define CLK_DIV7         (*(volatile unsigned long *)0xE010031c)
  28. #define CLK_DIV0_MASK   0x7fffffff
  29. #define APLL_MDIV       0x7d
  30. #define APLL_PDIV       0x3
  31. #define APLL_SDIV       0x1
  32. #define MPLL_MDIV        0x29b
  33. #define MPLL_PDIV        0xc
  34. #define MPLL_SDIV        0x1
  35. #define set_pll(mdiv, pdiv, sdiv)  (1<<31 | mdiv<<16 | pdiv<<8 | sdiv)
  36. #define APLL_VAL        set_pll(APLL_MDIV,APLL_PDIV,APLL_SDIV)
  37. #define MPLL_VAL        set_pll(MPLL_MDIV,MPLL_PDIV,MPLL_SDIV)
  38. // PWM CLOCK
  39. #define        TCFG0            ( *(volatile unsigned long *)0xE2500000)
  40. #define        TCFG1            ( *(volatile unsigned long *)0xE2500004)
  41. #define        TCON              ( *(volatile unsigned long *)0xE2500008)
  42. #define        TCNTB0            ( *(volatile unsigned long *)0xE250000C)
  43. #define        TCMPB0            ( *(volatile unsigned long *)0xE2500010)
  44. #define        TCNTO0            ( *(volatile unsigned long *)0xE2500014)
  45. #define        TCNTB1            ( *(volatile unsigned long *)0xE2500018)
  46. #define        TCMPB1            ( *(volatile unsigned long *)0xE250001C)
  47. #define        TCNTO1            ( *(volatile unsigned long *)0xE2500020)
  48. #define        TCNTB2            ( *(volatile unsigned long *)0xE2500024)
  49. #define        TCMPB2            ( *(volatile unsigned long *)0xE2500028)
  50. #define        TCNTO2            ( *(volatile unsigned long *)0xE250002C)
  51. #define        TCNTB3            ( *(volatile unsigned long *)0xE2500030)
  52. #define        TCMPB3            ( *(volatile unsigned long *)0xE2500034)
  53. #define        TCNTO3            ( *(volatile unsigned long *)0xE2500038)
  54. #define        TCNTB4            ( *(volatile unsigned long *)0xE250003C)
  55. #define        TCNTO4            ( *(volatile unsigned long *)0xE2500040)
  56. #define        TINT_CSTAT         ( *(volatile unsigned long *)0xE2500044)
  57. void init_clock(void)
  58. {

  59.             CLK_SRC0 = 0x0;// close PLL        
  60.             APLL_LOCK= 0x0000FFFF;
  61.             MPLL_LOCK = 0x0000FFFF;            
  62.             // set PLL         
  63.             APLL_CON0 =APLL_VAL;//FOUT= MDIV * FIN / (PDIV*2^(SDIV-1)) = 1000 MHz        
  64.             MPLL_CON = MPLL_VAL;// FOUT = MDIV*FIN/(PDIV*2^SDIV)=667 MHz               
  65.             CLK_SRC0= 0x10001111;// FOUT = MDIV*FIN/(PDIV*2^SDIV)=667 MHz        
  66. }
  67. void init_timer(unsigned long tcntb,unsigned long tcmpb)
  68. {
  69.         TCON = 0;
  70.         TCFG0= (TCFG0 & ~0xff00ff)|0x41;//设置预分频系数65
  71.         TCFG1 =(TCFG1 & ~(0xf<<0))|0x04;// 16分频  输入时钟= PCLK /(prescaler+ 1) /divider =62500hz
  72.         TCNTB0 = tcntb;
  73.         TCMPB0 = tcmpb;
  74.         TCON |= 1<<1;// 更新TCNTB0 TCMPB0
  75.         TCON &= ~(1<<1);// 清手动更新位
  76.         TCON |= (1<<0)|(1<<3);// 选择自动加载并启动timer0
  77.         //TINT_CSTAT |= 1;
  78. }
  79. static void Delay(long count)
  80. {
  81.             volatile int i, j = 0;
  82.             volatile static int loop = 800000000/10000;
  83.             for(;count > 0;count--)
  84.                 for(i=0;i < loop; i++) { j++; }
  85. }
  86. void main(void)
  87. {

  88.     GPD0CON = (GPD0CON & ~(0xF << 0))|0x2;
  89.     MP0_4CON= (MP0_4CON & ~0xFFFF0000) | 0x11110000;
  90.     MP0_4DAT|= 0xF0;
  91.     init_clock();//初始化时钟
  92.     init_timer(62500,40000);//初始wttimer                                   
  93.     while(1)
  94.     {
  95.     }
  96.     //TCON = 0;

  97. }
复制代码




0个回复

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

本版积分规则


关闭

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

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-4-19 20:09 , Processed in 0.531700 second(s), Total 60, Slave 41 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表