linux 直流电机驱动设计,嵌入式Linux直流电机驱动.PPT

嵌入式Linux直流电机驱动.PPT

嵌入式Linux直流电机驱动实验 开发平台中直流电机驱动的实现 S3C2410芯片自带定时器,所以控制部分省去了三角波产生电路、脉冲调制电路和PWM信号延迟及信号分配电路,取而代之的是S3C2410芯片的定时器0、1组成的双极性PWM发生器 GPBCON(见数据手册p268) TOUT0 --> GPB0[1:0] TOUT1 --> GPB0[3:2] PWM发生器用到的主要寄存器 TCFG0:定时器配置寄存器0 TCFG1 :定时器配置寄存器1 TCON :定时器控制寄存器 TCNTB0 :定时器计数缓冲区寄存器 TCMPB0 :比较缓冲区寄存器 TCNTO0 :定时器观察寄存器 参见: PWM发生器用到的寄存器.pdf 数据手册:um_s3c2410.pdf 代码分析-IO初始化 #define tout01_enable() \ ({ GPBCON &=~ 0xf;\ GPBCON |= 0xa; }) #define tout01_disable() \ ({ GPBCON &=~ 0xf;\ GPBCON |= 0x5; \ GPBUP &=~0x3; }) 代码分析-定时器寄存器配置 #define dcm_start_timer() \ ({ TCFG0 &= ~(0x00ff0000); \ TCFG0 |= (DCM_TCFG0); \ TCFG1 &= ~(0xf); \ TCNTB0 = DCM_TCNTB0; /* less than 10ms */ \ TCMPB0 = DCM_TCNTB0/2; \ TCON &=~(0xf); \ TCON |= (0x2); \ TCON &=~(0xf); \ TCON |= (0x19); } ) #define dcm_stop_timer()({ TCON &= ~0x1; }) 实验一:编写Makfile文件 根据上一节demo模块Makefile编写本实验Makefile,并利用自己的Makefile重新编译 实验步骤 编译驱动模块及测试程序: [root@bc ]# cd dc-motor/ [root@bc dc-motor]# make 挂载nfs 在开发板上运行: [/mnt/nfs/dc-motor] insmod s3c2410-dc-motor.o [/mnt/nfs/dc-motor]./dcm_main 实验二:为驱动模块增加ioctl和中断 参考已给出的驱动模块及应用程序,为驱动模块增加定时器0中断,并通过增加ioctl方法功能的方法将定时器0中断次数读到应用程序中。可以定义一个全局变量counter记录TIMER0中断次数。 增加ioctl方法的功能(1) 驱动ioctl方法中: #define DCM_IOCTRL_RDINTNUM (0x20) static int s3c2410_dcm_ioctl (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) { switch(cmd){ case DCM_IOCTRL_RDINTNUM: //send TIMER0 interrupt number to user return counter; } 增加ioctl方法的功能(2) 应用程序中调用: counter=ioctl(dcm_fd, DCM_IOCTRL_RDINTNUM, 1);将TIMER0中断次数读出 中断处理 中断是所有现在微处理器的重要功能,Linux驱动程序中对于中断的处理方法一般使用以下几个函数: request_irq函数 用于请求安装某个中断号的中断处理程序 其原型为:extern int request_irq(unsigned int irq, void (*handler)(int irq, void *dev_id, struct pt_regs *regs), unsigned long flag, const char * dev_name, voi

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值