历史上的今天
返回首页

历史上的今天

今天是:2025年02月05日(星期三)

正在发生

2021年02月05日 | ARM9舵机程序详解

2021-02-05 来源:eefocus

/*****************************************************************************************************************************

定时器特性总结如下。

● 5 个16 位定时器可以工作在中断模式或DMA 模式。

● 包括2 个8 位预分频器、2 个4 位分割器。

● 输出波形的占空比可用编程控制(即进行脉宽调制)。

● 具有自动重载模式或单次触发模式。

● 具有死区发生器。


与定时器相关的寄存器有:TCFG0、TCFG1、TCON、TCMPBn、TCNTBn、TCNTOn

定时器的频率由PCLK分频而来,即Ftimer = PCLK / (prescaler+1) / MUX

prescaler位于TCFG0,MUX位于TCFG1

TCON控制定时器的运行:是否自动装载定时器初值,是否手动装载,开始/停止 定时器。

TCNTBn放定时器n的初值,装载用

TCMPBn放定时器n的匹配值,用于调至PWM

TCNTOn,只读,用于观察定时器n的初值


编程方法如下:

定时器初始化()

{

设置预分频器prescaler (TCFG0)

设置MUX (TCFG1)

赋初值TCNTB TCNTB = (PCLK / (prescaler+1) / MUX) * 中断时间间隔(单位秒)

TCON: 手动跟新打开

手动跟新关闭

自动装载(计时器循环计数)

启动定时器

}


中断初始化()

{

清除SRCPNF、INTPND中的相应中断标志位(可以调用ClearPending函数)

填入中断例程地址于中断向量表 pISR_TIMER1

使能相应中断 rINTMSK

}


中断例程() __irq

{

……中断程序……

清除SRCPND、INTPND中的相应中断标志位

}



******************************************************************************************************************************/


//以下驱动对于PCLK=50MHZ的开发板可以直接添加到工程中使用,GPG14引脚对应一路舵机,需要的话可以在添加7路


#include "2440addr.h"

#include "def.h"

typedef unsigned int uint32;

#define ClearPending(bit) {rSRCPND |= bit;rINTPND = rINTPND;}//宏定义清零中断标志位

#define RGB(r,g,b) (unsigned int)(r << 16) + (g << 8) + b

extern unsigned int pwm[8];

extern unsigned int *p;//锁定指针所指的数组,防止跑偏

void __irq timer0_ISR(void);

void sifuTimer0(unsigned int);

void Task1(void);

void Glib_FilledRectangle(int x1,int y1,int x2,int y2,int color);

void BUZZER_PWM_Test( void );

void int_time0_init(void)

{

//Uart_Printf("Timer0中断实验n");

//p=pwm; //指针初始化

ClearPending(1<<10); //清楚中断标志

pISR_TIMER0=(unsigned)timer0_ISR; //填入中断例程地址于中断向量表

rINTMSK&=~(1<<10); //TIME0开中断

}


void __irq timer0_ISR(void) //定时器中断函数

{

static char n,biaozhi;

static unsigned int hhe,good;

good++;

n++;

switch(n)

{

case 1: sifuTimer0(*p-400); rGPGDAT|=1<<14; break;

case 2: sifuTimer0(2900-*p); rGPGDAT&=~(1<<14);n=0; break;

case 3: sifuTimer0(*(p+1)); break;

case 4: sifuTimer0(2500-*(p+1)); break;

case 5: sifuTimer0(*(p+2)); break;

case 6: sifuTimer0(2500-*(p+2)); break;

case 7: sifuTimer0(*(p+3)); break;

case 8: sifuTimer0(2500-*(p+3)); break;

case 9: sifuTimer0(*(p+4)); break;

case 10: sifuTimer0(2500-*(p+4)); break;

case 11: sifuTimer0(*(p+5)); break;

case 12: sifuTimer0(2500-*(p+5)); break;

case 13: sifuTimer0(*(p+6)); break;

case 14: sifuTimer0(2500-*(p+6)); break;

case 15: sifuTimer0(*(p+7)); break;

case 16: sifuTimer0(2500-*(p+7)); n=0; break;

}

if(good==100)

{

// Task1();

good=0;

}

/*biaozhi?(*p)++:(*p)--;

if(*p>=2050)

biaozhi=0;

else if(*p<=50)

biaozhi=1;*/

ClearPending(1<<10); //清楚中断标志

}



void time0_init(void)

{

rTCFG0 = (rTCFG0 &(~0xFF)) | 24;

rTCFG1 = (rTCFG1 &(~0xF)) | 0;

rTCNTB0 = 1500;

rTCON |= 1<<1; //开启手动更新,将TCNTB0的值载入定时器0

rTCON &= ~(1<<1); //关闭手动更新(必须)

rTCON |=0x1<<0; //开启定时器,关闭自动装载模式

rGPGCON|=1<<28; //舵机输出引脚初始化

rGPGUP=0x00; //舵机输出引脚初始化


//关于中断时间的设定: TCNTB =(PCLK / (prescaler+1) / MUX) * 中断时间间隔(单位秒)

}

//装载的频率是1MHz

void sifuTimer0(U32 us)

{

rTCON |= 1<<1; //开启手动更新,将TCNTB0的值载入定时器0

rTCNTB0=us;

rTCON &= ~(1<<1); //关闭更新

}


//***********************************************************************************************************

void Task1(void)

{

static unsigned int task1Cnt=0;

//实现流水灯

if((task1Cnt%5 == 0))

rGPBDAT = 0x1E0; //全灭

else

rGPBDAT = rGPBDAT - (0x10<<(task1Cnt%5));

task1Cnt++;

}


推荐阅读

史海拾趣

Aeroflex Metelics / Hi-Rel Components公司的发展小趣事

Aeroflex Metelics / Hi-Rel Components是一家专注于高可靠性电子组件的制造商,为航空航天、国防、医疗和工业等领域提供高性能的组件和解决方案。以下是该公司发展的五个相关故事:

  1. 公司成立和早期发展: Aeroflex Metelics / Hi-Rel Components的历史可以追溯到1960年代初,当时该公司作为Metelics的一部分,成立于美国马萨诸塞州的劳伦斯市。最初,公司主要生产用于微波和射频应用的二极管和其他电子元件,为国防和航空航天等行业提供关键的部件。

  2. 技术创新和产品多样化: Aeroflex Metelics / Hi-Rel Components致力于技术创新和产品多样化,不断推出符合行业标准和客户需求的新产品。公司的产品范围逐渐扩展,包括功率放大器、混频器、开关和整流器等,涵盖了广泛的应用领域。

  3. 质量管理和认证: 为确保产品质量和可靠性,Aeroflex Metelics / Hi-Rel Components严格执行质量管理体系,并获得了多项国际认证,如ISO 9001和AS9100。公司在生产过程中采用先进的工艺和测试技术,确保产品符合客户的高要求和严格标准。

  4. 全球供应链和市场拓展: 随着业务规模的扩大和市场需求的增长,Aeroflex Metelics / Hi-Rel Components不断优化全球供应链,并在美国和其他地区建立了多个生产基地和销售办事处。公司通过广泛的销售网络和服务体系,加强了对客户的支持和服务,并开拓了新的市场领域。

  5. 成为行业领先供应商: 多年来,Aeroflex Metelics / Hi-Rel Components凭借其卓越的技术、丰富的经验和优质的产品,成为航空航天、国防和医疗等行业的重要供应商之一。公司在高可靠性电子组件领域的领先地位得到了进一步巩固,为客户提供了高品质、可靠的解决方案,赢得了良好的声誉和市场地位。

Falco Electronics公司的发展小趣事

Falco Electronics非常重视企业文化建设。公司倡导“以人为本”的管理理念,注重员工的成长和发展。公司为员工提供了良好的工作环境和福利待遇,还定期开展各种培训活动,帮助员工提升技能水平。这种良好的企业文化吸引了大量优秀人才的加入,也为公司的持续发展提供了有力保障。

Computer Conversions Corp公司的发展小趣事

面对日益严峻的环境问题,Computer Conversions Corp积极响应环保号召,开始研发更加环保的计算机转换技术。公司不仅优化了生产工艺,减少了生产过程中的能源消耗和废弃物排放,还推出了一系列节能型转换设备,帮助客户在提升计算效率的同时,也降低了能源消耗。这一举措不仅赢得了客户的赞赏,也提升了公司的社会形象。

Esico-Triton公司的发展小趣事

进入XXXX年代,Esico-Triton开始将目光投向国际市场。公司积极参加国际电子展会,与世界各地的潜在客户和合作伙伴建立联系。通过不断的市场调研和产品调整,Esico-Triton成功打入欧洲和亚洲市场,产品的国际知名度逐渐提升。

芯朋微电子(chipown)公司的发展小趣事

随着技术的不断进步和市场需求的增长,芯朋微电子逐步将产品线拓展至标准电源和工业驱动领域。2013年,公司推出工控功率芯片产品,这些芯片广泛应用于电机、基站、智能电表等行业领域,进一步扩大了公司的市场份额。

Alpha Industries公司的发展小趣事

随着电子技术的飞速发展,军事装备也在不断升级。Alpha Industries敏锐地捕捉到了这一趋势,开始将电子技术应用于其军事服装设计中。例如,公司研发了一款带有GPS定位功能的飞行夹克,帮助飞行员在复杂环境中快速定位。此外,Alpha Industries还利用电子传感器技术,开发出能够监测士兵体温和心率的战地风衣,为军队提供更为全面的保障。

问答坊 | AI 解惑

调试伺服系统心得2

    今天特意留意下机台配电电盘的硬件构造,终于弄清隔离地与模拟地的差异。而且在工控产品好多会涉及到隔离地的问题。我前天看了电路原理图,也问了我部门老大,但是我没太在意。在测试前准备工作中,我因隔离地问题,将一块USB转 ...…

查看全部问答>

没搞明白,取补是如何实现双字节减法的

(PIC18F248) NEG_A                                        ;ACCA取补子程序       &nbs ...…

查看全部问答>

3.3V和5V混合逻辑系统设计

写得不错,转过来保留 3.3V和5V混合逻辑系统设计     2009/01/05  asdjf@163.com  www.armecos.com 5V TTL器件可以和3.3V TTL器件直接相连,没有任何问题。 5V CMOS器件输出可以直接正确驱动3.3V TTL器件输入, ...…

查看全部问答>

地址编址的问题

我在FPGA中建了个FIFO,16位输出数据,片选了ARM的nRCS2,EBI总线连接到FPGA中FIFO的16位输出端,请问物理地址0x10000000中的数据是否就是FIFO中的首个的数据呢?这两个芯片中的地址是怎么对应的呢?…

查看全部问答>

输入捕获测量频率有误差怎么办

试着用输入捕获模式来测量输入信号的频率。。结果算出来和实际值相差很大,请大家帮忙分析一下原因吧,谢谢啊 程序: EXTI_InitStructure.EXTI_Line = EXTI_Line3; ??EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; ??EXTI_InitStr ...…

查看全部问答>

请教STM32高级定时器PWM输出极性问题

TIM1_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;   //配置输出极性(TIM 输出比较极为低) 下载 (23.24 KB) 2010-10-5 22:13 …

查看全部问答>

请问自定义数组到底放到程序page0,还是1中,再问这句话,是否说:变量溢出

error: can\\\'t allocate .text (sz: 00002cc0 page: 0) in PRAMH0 (avail:             00000ffe) 我应该怎么修改,谢谢…

查看全部问答>

谁来支援我一下...SDIO和RTC的中断套嵌该怎么处理?

RT.现在在做一个小模块.RTC生成时间作为日志的一部分保存在SD卡上.可是...中断好像冲突了.不能1s生成一个文件.1s中断不执行..咋办呢 具体如下: 主函数中 void InterruptConfig(void) {   /* Deinitializes the NVIC */  &nb ...…

查看全部问答>

msp430与PC机远程通信

我用msp430f149与PC机进行远程通信,用max487转换为485接口,单片机发送到PC机的数据,PC机能正确收到,但PC机发送到单片机的数据,单片机收不到,哪位大侠知道为什么?帮帮忙,我着急啊!…

查看全部问答>

晶振的峰值电压问题

我用的一个16MHZ的高速晶振源,它的峰值电压在1V左右,在2131上测试了结果跑不起来,是根本不能用还是别的原因?…

查看全部问答>