日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

AB1601GPIO不支持较高频率的脉冲中断

發(fā)布時間:2025/3/21 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AB1601GPIO不支持较高频率的脉冲中断 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

當(dāng)輸入信號的周期比較小時,中斷腳無法做出響應(yīng)。

測試代碼如下:

#include "ab1600.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ab_uart.h"
#include "ab_clk.h"
#include "Drv_gpio.h"
#include "Drv_pinmux.h"


//pio input/output
#define PIO_INPUT 0
#define PIO_OUTPUT 1


//pio value
#define PIO_LOW 0
#define PIO_HIGH 1




//pio number
enum
{
? ? WAKEUP_KEY = 0,
? ? PIO0 = WAKEUP_KEY,
? ? PIO1,
? ? PIO2,
? ? PIO3,
? ? PIO4,
? ? PIO5,
? ? PIO6,
? ? PIO7,
? ? PIO8,
? ? PIO9,
? ? PIO10,
? ? PIO11,
? ? PIO12,
? ? PIO13,
? ? PIO14,
? ? PIO15,
? ? PIO16,
? ? PIO17,
? ? PIO18,
? ? PIO19,
? ? PIO20,
? ? PIO21,
? ? PIO22,
? ? PIO23,
? ? PIO24,
? ? PIO25,
? ? PIO26,
? ? PIO27,
? ? PIO28,
? ? PIO29,
};
















static void uart1_rx_data_ind(uint16_t len)
{
uint8_t buf1[64];
uint16_t rlen;
while(rlen = AB_UART_Read(uart1_ins, buf1, 32))
{


}
}








const Ab_UartParam uart1_param_3M = {115200L, 380, UART_FORMAT_WORD_LENGTH_8_BIT | UART_FORMAT_STOP_1_BIT, uart1_rx_data_ind};














#define GPIO_TEST_PIN_OUT PIO19//輸出脈沖信號用于產(chǎn)生中斷


static void PinOutHigh(void)
{
DRV_Gpio_ValSet((1L << GPIO_TEST_PIN_OUT), PIO_HIGH);
}






static void PinOutLow(void)
{
DRV_Gpio_ValSet((1L << GPIO_TEST_PIN_OUT), PIO_LOW);
}






void PinOutInit(void)
{
DRV_PinMux_SigSet( (1L << GPIO_TEST_PIN_OUT), PIN_GPIO);
DRV_Gpio_DirSet( (1L << GPIO_TEST_PIN_OUT), PIO_OUTPUT);
DRV_Gpio_PullSet( (1L << GPIO_TEST_PIN_OUT), PULL_UP);
DRV_Gpio_ValSet( (1L << GPIO_TEST_PIN_OUT), PIO_LOW);
}














#define GPIO_INT_PIN_IN PIO18//用于檢測中斷輸入
#define GPIO_INT_PIN_IN_MASK (1L<<GPIO_INT_PIN_IN)


static void GpioIntHandler(unsigned char io_num)
{
printf("io %d interrupt......\n", io_num);
}






static void GpioIntEn(void)
{
//DRV_Gpio_IntReg(GPIO_INT_PIN_IN, (GPIO_INTR_TYPE_ENUM)EDGE_POS, GpioIntHandler);//上升沿
DRV_Gpio_IntReg(GPIO_INT_PIN_IN, (GPIO_INTR_TYPE_ENUM)EDGE_NEG, GpioIntHandler);//下降沿
DRV_Gpio_IntEn(GPIO_INT_PIN_IN);
}








void GpioIntInit(void)
{
DRV_PinMux_SigSet( GPIO_INT_PIN_IN_MASK, PIN_GPIO);
DRV_Gpio_DirSet( GPIO_INT_PIN_IN_MASK, PIO_INPUT);
DRV_Gpio_PullSet( GPIO_INT_PIN_IN_MASK, PULL_UP);
GpioIntEn();
}
















//gpio18和gpio19相連
void main()
{
AB_CLK_Switch(AB_CLK_16M, false);//XT


AB_UART_Open(uart1_ins, (Ab_UartParam*)&uart1_param_3M);
Ab_printf_init(uart1_ins);//print output port


PinOutInit();
GpioIntInit();


printf("gpio int test!\r\n");
while(1)
{


//產(chǎn)生一個脈沖
PinOutHigh();
OS_delay_ms(5);//5毫秒的脈沖無法檢測到
PinOutLow();




/*
//產(chǎn)生一個脈沖
PinOutHigh();
OS_delay_ms(10);//10ms的可以檢測到
PinOutLow();
*/


OS_delay_ms(1000);
}
}


總結(jié)

以上是生活随笔為你收集整理的AB1601GPIO不支持较高频率的脉冲中断的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。