主题 : S3C6410 PWM 的裸机程序的初始化部分 复制链接 | 浏览器收藏 | 打印
选择ARM,我能走多远!?
级别: 新手上路
UID: 44063
精华: 0
发帖: 13
金钱: 65 两
威望: 13 点
综合积分: 26 分
注册时间: 2011-04-21
最后登录: 2011-05-26
楼主  发表于: 2011-04-30 18:42

 S3C6410 PWM 的裸机程序的初始化部分

void PWM_Init(void)
{
  rGPFCON = 0x20000000; //设置GPF14为PWM0输出
  rTCFG0  = 49;         //设置预定标器值
  rTCFG1  = 0x0000;     //设置分频数
  rTCNTB0 = 0x000007ff; //设置上限值开始值
  rTCMPB0 = 0x00000000; //设置比较值,电平在rTCMPB0与rTCNTB0相等时反转。

  //下面两项的设置似乎很严格!!!!!
  rTCON |= (1<<1);  //手动更新
  rTCON  = 0x0f;    //定时器0开始工作
 }

注:以上初始化能驱动PWM,但很奇怪的是以下这两句只能这样配置,改成其它值就不行了:
rTCON |= (1<<1);  //手动更新
rTCON  = 0x0f;    //定时器0开始工作
期待高手解决!
选择ARM,我能走多远!?
级别: 侠客
UID: 39247
精华: 2
发帖: 51
金钱: 355 两
威望: 71 点
综合积分: 142 分
注册时间: 2011-03-07
最后登录: 2015-05-31
1楼  发表于: 2011-05-19 20:13
    rTCFG0 = rTCFG0 & ~(0xff) | 255;
    rTCFG1 = rTCFG1 & ~(0xf) | 0x3;
    rTCNTB0 = 30000;//PCLK >> 7 / 2200;
    rTCMPB0 = rTCNTB0 >> 4;
    INTC_SetIntISR(INT_TIMER0, pwm_isr);
    INTC_Enable(INT_TIMER0);
    rTINT_CSTAT |= 0x1;
    rTCON = rTCON & ~(0x1f << 0) | (0x0 << 4) | (0x1 << 3) | (0x0 << 2) | (0x1 << 1) | (0x1 << 0);
    rTCON &= ~(0x1 << 1);
我的配置如上,怎么改都行,只是开始了定时器后要清除手动更新位