tar -zxvf 你差明下载的源码包 -C 解压的目录
cd 解压的目录下的src目录
make
make install
完了以后加载下模块裂散就可以了,insmod 驱动模块的虚源告名称(是一个.ko的文件)
既然你选择的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()
}
Sub MergeSort(Array() As Integer, First As Integer, Last As Integer)Dim mid As Integer = 0
If first<last Then
mid = (first+last)\ 2
MergeSort(Array, first, mid)
MergeSort(Array, mid+1, last)
Merge(Array, first, mid, last)
End If
End Sub
/*
以下示例代码实现了归并 *** 作。array[]是元素序列,其中从索引p开始到q位置,乎陆按照升序排列,同时,从(q+1)到r也已经按照升序排列,merge()函桐判数将把这两岁轮顷个已经排序好的子序列合并成一个排序序列。结果放到array中。
*/
/**
* 0 <= p <= q <r, subarray array[p..q] and array[q+1..r] are already sorted.
* the merge() function merges the two sub-arrays into one sorted array.
*/
void Merge(int array[], int p, int q, int r)
{
int i,k
int begin1,end1,begin2,end2
int* temp = (int*)malloc((r-p+1)*sizeof(int))
begin1 = p
end1 = q
begin2 = q+1
end2 = r
k = 0
while((begin1 <= end1)&&( begin2 <= end2))
{
if(array[begin1] <= array[begin2]){
temp[k] = array[begin1]
begin1++
}
else
{
temp[k] = array[begin2]
begin2++
}
k++
}
while(begin1<=end1 || begin2<=end2)
{
if(begin1<=end1)
{
temp[k++] = array[begin1++]
}
if(begin2<=end2)
{
temp[k++] = array[begin2++]
}
}
for (i = 0i <=(r - p)i++)
array[p+i] = temp[i]
free(temp)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)