-
关于NUC029的GPIO中断消抖功能的疑惑,求解答
[size=14px]关于NUC029的GPIO中断消抖功能的疑惑,求解答[/size] [size=14px] [/size] [size=14px]NUC029中,GPIO有一个中断去抖功能。在“中断去抖周期控制(DBNCECON)”这个寄存器中需要配置采样周期。[/size] [size=14px]图片好像发不了,只能复制文字。该寄存器的DBCLKSEL位描述如下:[/size] [size=14px]去抖动采样周期选择[/size] [size=14px]0000 = 每 1 个时钟周期采样中断输入一次.[/size] [size=14px]0001 = 每 2 个时钟周期采样中断输入一次.[/size] [size=14px]0010 = 每 4 个时钟周期采样中断输入一次.[/size] [size=14px]0011 = 每 8 个时钟周期采样中断输入一次.[/size] [size=14px]0100 = 每16 个时钟周期采样中断输入一次.[/size] [size=14px]0101 = 每32 个时钟周期采样中断输入一次.[/size] [size=14px]0110 = 每64 个时钟周期采样中断输入一次.[/size] [size=14px]0111 = 每128 个时钟周期采样中断输入一次.[/size] [size=14px]1000 = 每256 个时钟周期采样中断输入一次.[/size] [size=14px]1001 = 每2*256 个时钟周期采样中断输入一次.[/size] [size=14px]1010 = 每4*256 个时钟周期采样中断输入一次.[/size] [size=14px]1011 = 每8*256 个时钟周期采样中断输入一次.[/size] [size=14px]1100 = 每16*256 个时钟周期采样中断输入一次.[/size] [size=14px]1101 = 每32*256 个时钟周期采样中断输入一次.[/size] [size=14px] [/size] [size=14px]我对GPIO中断去抖功能的理解是:在GPIO边沿触发中断时,在经过DBCLKSEL位配置的采样周期后再进行一次检测,然后再判断是否进入中断处理函数,这个过程由硬件完成。[/size] [size=14px]我想知道GPIO中断去抖功能是不是我理解的这样。不对的话,希望大佬指正下。[/size]
16414浏览量 13回复量 关注量 -
辉芒FT60E121-SOP8 中断问题 sos
PA5触发中断时理应只有[color=#80080]BLUE_PIN ([/color][color=#80080]PA0) [/color]输出高电平,但实际情况也[color=#800080]YELLOW_PIN (PA2)[/color]有输出,有没有大佬懂,帮帮小弟 #include "SYSCFG.h" [color=#800080]//***********************宏定义****************************[/color] #define unchar unsigned char unchar FCount; unchar ReadAPin; [color=#800080]#define BLUE_PIN PA0 [/color] #define WHITE_PIN PA1[color=#800080] [/color] [color=#800080]#define YELLOW_PIN PA2[/color][color=#800080] [/color] //定义输出引脚 [color=#800080]#define turn_signal PA5 [/color] #define width_signal PA4 volatile unsigned char is_running = 0; volatile float pwm_counter = 0; #define PWM_PERIOD 10 // PWM周期,根据定时器频率调整 volatile float pwm_blue_duty = 0;//占空比 volatile float pwm_white_duty = 0;//占空比 volatile unsigned int cycle_count=0; volatile unsigned int step=10; int step1=0; [color=#808080]/*-------------------------------------------------[/color] [color=#808080]* 函数名:interrupt ISR[/color] [color=#808080]* 功能: 中断处理[/color] [color=#808080]* 输入: 无[/color] [color=#808080]* 输出: 无[/color] [color=#808080] --------------------------------------------------*/[/color] void interrupt ISR(void) { [color=#800080] if (PA5) { [/color] [color=#800080] YELLOW_PIN = 1; [/color] [color=#800080] BLUE_PIN = 0; [/color] [color=#800080] WHITE_PIN = 0;[/color] [color=#800080] }[/color] if (T0IE && T0IF) {T0IF = 0;} if(TMR2IE && TMR2IF) { TMR2IF = 0; if (pwm_counter >= PWM_PERIOD) pwm_counter = 0; else{pwm_counter+=0.1;} if (pwm_blue_duty>PWM_PERIOD){pwm_blue_duty=0;} } } [color=#808080]/*-------------------------------------------------[/color] [color=#808080]* 函数名:POWER_INITIAL[/color] [color=#808080]* 功能: 上电系统初始化[/color] [color=#808080]* 输入: 无[/color] [color=#808080]* 输出: 无[/color] [color=#808080] --------------------------------------------------*/ [/color] void POWER_INITIAL (void) { OSCCON = 0B01110001; //IRCF=111=16MHz/2=8MHz,0.125us INTCON = 0; //暂禁止所有中断 PORTA = 0B00000000; TRISA = 0B00110000; //PA输入输出 0-输出 1-输入 //PA4-OUT PORTC = 0B00000000; TRISC = 0B00000000; //PC输入输出 0-输出 1-输入 WPUA = 0B00110000; //PA端口上拉控制 1-开上拉 0-关上拉 //开PA6上拉 OPTION = 0B00000000; //Bit3=0 TMR0 MODE,PS=000=TMR0 Rate 1:2 PSRCA = 0B11111111; //源电流设置最大 PSRCC = 0B11111111; PSINKA = 0B11111111; //灌电流设置最大 PSINKC = 0B11111111; MSCON = 0B00110000; //Bit5: PSRCAH4和PSRCA[4]共同决定源电流。00:4mA; 11: 33mA; 01、10:8mA //Bit4: PSRCAH3和PSRCA[3]共同决定源电流。00:4mA; 11: 33mA; 01、10:8mA //Bit3: UCFG1<1:0>为01时此位有意义。0:禁止LVR;1:打开LVR //Bit2: 快时钟测量慢周期的平均模式。0:关闭平均模式;1:打开平均模式 //Bit1: 0:关闭快时钟测量慢周期;1:打开快时钟测量慢周期 //Bit0: 当T2时钟不是选择指令时钟的时候 // 0:睡眠时停止工作:1: 睡眠时保持工作。 } [color=#808080]/*----------------------------------------------------[/color] [color=#808080]* 函数名称:TIMER0_INITIAL[/color] [color=#808080]* 功能:初始化设置定时器[/color] [color=#808080]* 相关寄存器:T0CS T0SE PSA [/color] [color=#808080]* 设置TMR0定时时长=(1/系统时钟频率)*指令周期*预分频值*255[/color] [color=#808080]* =(1/16000000)*2*256*255=8.192ms[/color] [color=#808080] ----------------------------------------------------*/[/color] void TIMER0_INITIAL (void) { OPTION = 0B00000000; //Bit5 T0CS Timer0时钟源选择 // 1-外部引脚电平变化T0CKI 0-内部时钟(FOSC/2) //Bit4 T0CKI引脚触发方式 1-下降沿 0-上升沿 //Bit3 PSA 预分频器分配位 0-Timer0 1-WDT //Bit[2:0] PS 8个预分频比 111 - 1:256 T0IF = 0; //清空T0软件中断 } void TIMER2_INITIAL (void) { T2CON0 = 0B00000001; //T2预分频1:4,后分频1:1 //Bit[6:3]: 定时器2输出后分频比 0000-1:1 //Bit2: 定时器2输出是能位 0-关闭 1-使能 //Bit[1:0]: 定时器2预分频比 01-1:4 T2CON1 = 0B00000000; //T2时钟来自系统时钟,PWM1连续模式 //Bit4: PWM单脉冲模式选择 0-连续 1-单脉冲 //Bit3: PWM蜂鸣器模式选择 0-PWM模式 1:蜂鸣器模式 //Bit[2:0]:Timer2时钟源选择 000-指令时钟 TMR2H = 0; //TMR2赋值 TMR2L = 0; PR2H = 0; //PR赋值 PR2L = 200; TMR2IF = 0; //清TMER2中断标志 TMR2IE = 1; //使能TMER2的中断(配置成timer定时器时不注释) TMR2ON = 1; //使能TMER2启动 PEIE = 1; //使能外设中断 GIE = 1; //使能全局中断 } [color=#800080]void B_UP (void){[/color] [color=#800080] switch(step1)[/color] [color=#800080] { case 0:{pwm_blue_duty+=0.001;step1=1;}[/color] [color=#800080] break;[/color] [color=#800080] case 1:{if (pwm_counter < pwm_blue_duty) BLUE_PIN = 1; [/color] [color=#800080] else BLUE_PIN = 0; step1=0;}[/color] [color=#800080] break;[/color] [color=#800080] pwm_counter=0;[/color] [color=#800080] }[/color] [color=#800080]}[/color] [color=#808080]/*-------------------------------------------------[/color] [color=#808080]* 函数名: main [/color] [color=#808080]* 功能: 主函数[/color] [color=#808080]* 输入: 无[/color] [color=#808080]* 输出: 无[/color] [color=#808080] --------------------------------------------------*/[/color] void main(void) { POWER_INITIAL(); //系统初始化 TIMER0_INITIAL(); TIMER2_INITIAL(); GIE = 1; //开中断 T0IE = 1; //开定时器/计数器0中断 TMR2IE = 1; while(1) { [color=#800080] B_UP ();[/color] } }
2434浏览量 0回复量 关注量 -
车辆检测电路的分析 sos
[i=s] 本帖最后由 234234234 于 2024-6-29 15:51 编辑 [/i] [attach]2269114[/attach]帮忙叙述下相关电路[img]file:///C:\Users\Administrator\Documents\Tencent Files\1547528653\Image\C2C\01YD}M2JODGZX305(]HKUUG.png[/img]
1143浏览量 0回复量 关注量 -
FPGA千兆网通信关于前导码和帧起始定界符的问题。
[color=#333333][backcolor=rgb(255, 255, 255)][font="]{前导码:使用7字节0x55,[/font][/backcolor][/color][color=#333333][backcolor=rgb(255, 255, 255)][font="]一串1、0间隔[/font][/backcolor][/color][color=#333333][backcolor=rgb(255, 255, 255)][font="]} ,. 但是前导码[/font][/backcolor][/color][color=#333333][backcolor=rgb(255, 255, 255)][font=-apple-system, "][size=16px]每个字节内容都是:10101010,换成16进制是AA不是55,这是为什么。[/size][/font][/backcolor][/color][color=#333333][backcolor=rgb(255, 255, 255)][font="]{帧起始定界符:1字节0xD5(10101011) } ,D5不应该是11010101吗,为什么是10101011.[/font][/backcolor][/color] {}内容引用网上的解释。有没有大佬解答一下.
8833浏览量 1回复量 关注量 -
哪位大声有HC32L176的TIMER5+DMA来驱动11个WS2812B灯的程序 sos 赏800家园币
目前调试了一个版本,DMA更改占空比时会出现第一个占空比丢失的情况,比如占空比位[16,16,16,44,44,16,16,44,44],输出的PWM波形会出现只有[16,16,16,44,16,44]这样的,每次占空比值变化时就会丢失。 求一个可用的程序。
5182浏览量 0回复量 关注量 -
接触单片机11个月了,不知道是否该继续下去,请指教 赏100家园币
年龄40+了,大龄了,原来从事一些linux应用软件的工作(少部分linux的设备驱动),后来换工作后从事近1年的单片机的维护、开发工作。做过GPIO、PWM、按键的一些开发,对STM32单片机的框架感觉比较熟悉了。是继续从事单片机开发、设计呢?还是继续linux方面的开发呢?本人虽然有些菜,也希望有所进步、无愧人生。谢谢~~
23765浏览量 17回复量 关注量