简单记录LPC1788定时器匹配中断设置--通过寄存器直接操作
#include "timer_lpc1788.h"
#include "uart_lpc1788.h"
void TIMER0_IRQHandler(void) //TIMER0中断函数
{
if(((LPC_TIM0->IR) &(1<<0))==(1<<0)) //匹配中断发生
{
UARTSendStr("CLOS\r\n");
}
LPC_TIM0->IR |=(1<<0);//清除匹配中断标志位
}
void TIMER0_Init(uint32_t clk, uint32_t howtime)
{
LPC_SC->PCONP|=(1<<1);//打开TIMER0外设时钟
LPC_TIM0->CTCR &=(~0x03);//计数控制寄存器
LPC_TIM0->CTCR |=0x00;//定时器模式
//----PC=PR-----TC++
LPC_TIM0->TC =0;//定时计数器
LPC_TIM0->PR =0;//预分频寄存器
LPC_TIM0->PC =0;//预分频计数器
LPC_TIM0->TCR |=(1<<1); //定时器控制寄存器--复位定时器
LPC_TIM0->TCR &=~(1<<1); //清除复位
LPC_TIM0->PR =(clk/1000000-1);//预分频寄存器--系统外设时钟/1000000=1us需要的PC值
LPC_TIM0->IR=0xFFFFFFFF; //清除中断
//--------------------
LPC_TIM0->MR0=howtime;//匹配寄存器---多少个1us将匹配
LPC_TIM0->MCR &=~(0x07); //匹配控制寄存器--禁止匹配-复位-停止产生的中断
LPC_TIM0->MCR |=(1<<0); //允许匹配中断
LPC_TIM0->MCR |=(1<<1); //允许复位中断--匹配时TC复位-重新计数
NVIC_SetPriority(TIMER0_IRQn, ((0x01<<3)|0x01)); //设置定时器中断优先级
NVIC_EnableIRQ(TIMER0_IRQn); //定时器中断使能
LPC_TIM0->TCR |=(1<<0);; //启动定时器
}
关键字:LPC1788 TIMER匹配 中断设置 寄存器操作
引用地址:
LPC1788--TIMER匹配中断设置--寄存器操作
推荐阅读最新更新时间:2024-03-16 15:47
ARM LPC2103定时器中断方式寄存器设置
定时器查询方式定时器初始化: 1、设置定时器分频数,为(x+1)分频 2、匹配通道X中断并复位TxTC 3、比较值(1S定时值) 4、启动并复位TxTC 如: T1PR = 99; // 设置定时器0分频为100分频,得110592Hz T1MCR = 0x03; // 匹配通道0匹配中断并复位T0TC T1MR0 = 110592/2; // 比较值(1S定时值) T1TCR = 0x03; // 启动并复位T0TC T1TCR = 0x01; 研究了好长一段时间,LPC210X的定时器,查询方式定时很简单如上面,但中断方式要操作好多寄存器,太麻烦,一直是一头雾水。好不容易理出了思路,现将一段例程粘贴备忘。 #include
[单片机]
KST-STM32学习之数码管扫描中的一个寄存器操作疑问
猝不及防的寄存器操作 读到这里,竟然卡住了,吓得我赶紧回去查查书,在第一章的19页。当然它还是摘自《STM32中文参考手册》的P115页。 再结合一下当初的51,也就不难理解此处的含义,就是清0当前低8位的值,也就是数码管对应的段选,然后接下来要进行读取缓冲区的值,写入到该寄存器中,最下面的if else,当然就是进行位选了,较51只是段选,位选的顺序反了而已。 当然,查阅资料的过程中,还发现一个有意思的函数,《STM32固件库使用手册》 阅读函数实现后发现其实本质也是ODR寄存器的操作,不信看图。。。
[单片机]
STM8L外部中断为何死循环 寄存器操作
STM8L 系列单片机是 ST公司推出的低功耗单片机,与STM8S系列相比功耗降低了很多,但内部结构也删减了很多,使用时一定要仔细阅读手册。 这是第一次使用STM8,实现功能不是很复杂就没想研究库函数,准备直接控制寄存器操作,没想到本人 因为中断问题纠结了大半天。 在外部中断中这一点很不同, STM8S自动清除外部中断,而STM8L是需要软件清除, 清除标志位的寄存器根据设置而不同,下面有说明。 下面以STM8L外部中断 PB1为例 说明外部中断 寄存器操作 设置外部中断有下面几步: 第一步、设置IO口为中断输入 通过设置 (PB_DDR |= 0X00; PB_CR1 |= 0X02; PB_CR2 |= 0X02;)
[单片机]
STM32寄存器操作和库函数操作区别
/*********************** 结构体操作点亮LED ********************************/ #include stdint.h //数据类型声明标准头文件 #define __IO volatile //定义__IO //GPIO寄存器结构体定义 typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef;
[单片机]
飞思卡尔单片机MC9S12XEP100中断优先级设置
#include MC9S12XEP100.h void Interrup_priority(void) { //INT_CFADDR:Interrupt Request Configuration Address Register //INT_CFDATA0-7:Interrupt Request Configuration Data Registers INT_CFADDR = 0xD0; //选择中断所在的组别,0xD0,D表示组别 INT_CFDATA2 = 7; //选择该组别中的第2个中断,串口1,设置其优先级为
[单片机]
直接通过寄存器地址操作控制LED灯(定义常量标示对应寄存器)
直接通过地址常量对应给寄存器赋值的方式是最简捷的方式,但程序的可读性极差(不容易地址常量值得知是对应哪个寄存器),程序的可移植性差,为了提高程序的可读性和可移植性,通常预定义符号常量和符号变量。 void SystemInit() { } void delay(int t) { int i; for( ;t 0; t--) for(i=0;i 1000;i++); } int main() { *((unsigned int *)0x40021018) |= 0x1 4; //开启GPIOC时钟 *((unsigned int *)0x40
[单片机]
寄存器版本的跑马灯操作流程(战舰开发板V3)
寄存器版本的跑马灯操作流程(战舰开发板V3) 跑马灯需要配置的IO口 PB5&PE5两个IO口。 需要配置的寄存器 RCC_APB2ENR外设时钟使能寄存器 GPIOx_CRL端口配置低寄存器 ODR端口输出寄存器 BSRR端口位设置/清除寄存器 BRR端口位清除寄存器 IO口寄存器说明 配置IO口的流程 Led.c #include led.h #include stm32f10x.h void LED_Init(void) // LED初始化函数体定义 { RCC- APB2ENR|=1 3; // 使能时钟 RCC- APB2ENR|=1 6; // 使能时钟
[单片机]
MSP430F5529的P1.7、P2.2中断和频率设置
MSP430F5529单片机的P1.7、P2.2 io口中断和频率设置程序: #include "msp430F5529.h" #define P15_H (P1IN & BIT5); #define P15_L (P1OUT & (~BIT5)); int tt=0,temp,kk,i; void delay(int ns) { int kk; while(ns--) for(kk=0;kk 120;kk++); } //******A/D转换函数设置*****// void adc1() { P1SEL |=BIT6; //转换模拟信号从P1.6输入,内部集成了转换模块 ADC12CTL0 =ADC12O
[单片机]