Linux 没有认出I2C 芯片 PCA9555

Linux 没有认出I2C 芯片 PCA9555,第1张

建议:你可以上网卡厂商的官方网站上下载源码,在liunx下进行源码编译安装,liunx是不支持exe文件的运行的。进行源码编译安装的步骤的很简单,就两个三个命令

tar -zxvf 你下载的源码包 -C 解压的目录

cd 解压的目录下的src目录

make

make install

完了以后加载下模块就可以了,insmod 驱动模块的名称(是一个.ko的文件)

CCON = 0//初始化PCA控制寄存器,PCA定时器停止,清除CF标志,清除模块中断标志

CL = 0 //复位PCA计数寄存器

CH = 0

CMOD = 0x02 //设置PCA时钟源为sysclock/2,禁止PCA定时器溢出中断

value = T100KHz //计算PCA输出100K方波应设定的值

CCAP0L = value //将值得低8位赋给CCAP0L

CCAP0H = value >>8 //高8位赋给CCAP0H

value += T100KHz //累加,为下一次赋值做好准备。//这个地方绝对不能注释掉,产生方波就靠它了。

CCAPM0 = 0x4d //PCA模块1为16位定时器模式,同时反转CEX0(P1.3)口

CR = 1 //PCA定时器开始工作

EA=1 //开中断

========================================================

void pca_isr()interrupt 7 using 1

{

CCF0=0

CCAP0L=value

CCAP0H=value>>8

//value +=T100KHZ//累加,这个地方也绝对不能注释掉。要产生方波,就得每次在原值的基础上加上同样的值。

}

既然你选择的STC单片机带PCA,为什么不直接利用PCA模块配置成PWM功能,说一下具体型号,给你段利用PWM产生固定频率方波的代码参考。

//****************pwm.h********************************

#define Start_PWM() CR = 1 //PCA计时器开始工作

#define Stop_PWM() CR = 0 //PCA计时器停止工作

extern void InitPWM()

extern void ChangePWM(uint16 f)

//****************pwm.C********************************

#include "pwm.h"

#include "stc15F2k60s2.h"

#define CCP_S0 0x10 //P_SW1.4

#define CCP_S1 0x20 //P_SW1.5

static uint16 data frequency

static uint16 data value

void PCAisr() interrupt 7

{

CCF1 = 0 //清中断标志

CCAP1L = value

CCAP1H = value >>8 //更新比较值

value += frequency //累加

}

void SetPWMFrenquency(uint16 frq)

{

frequency=frq

value = frequency

CCAP1L = value //将值得低8位赋给CCAP1L

CCAP1H = value >>8 //高8位赋给CCAP1H

value += frequency //累加,为下一次赋值做好准备。产生同固定频率的方波就靠它了。

}

//p2.6/CCP1_3

void InitPWM()

{

ACC = P_SW1

ACC &= ~(CCP_S0 | CCP_S1) //CCP_S0=0 CCP_S1=1

ACC |= CCP_S1 //(P2.4/ECI_3, P2.5/CCP0_3, P2.6/CCP1_3, P2.7/CCP2_3)

P_SW1 = ACC

CCON = 0//初始化PCA控制寄存器

//PCA定时器停止

//清除CF标志

//清除模块中断标志

CL = CH = 0 //复位PCA计数寄存器

CMOD = 0x08 //设置PCA时钟源为sysclock,禁止PCA计数器溢出中断

CCAPM1 = 0x4d//0100 1101//PCA模块1为16位定时器模式,同时反转(P2.6)口

PPCA = 1 //中断优先级

SetPWMFrenquency(12000) //frq=24000000/2/1000=12000,每秒钟1000hz

}

void ChangePWM(uint16 frq)

{

Stop_PWM() //停止PCA计时器

CL=CH=0 //PCA计数器清零

CCF1=0 //PCA1的中断标记清零

SetPWMFrenquency(frq)

Start_PWM()

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11341998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存