新唐芯片学习笔记——GPIO

新唐芯片学习笔记——GPIO

  • 概述
    NuMicro®NUC029 最多有40个通用I/O引脚,这些引脚和其它功能共享。40个引脚分为6个端口,分别命名为P0, P1, P2, P3, P4和P5,每个端口最多有8个引脚。每个引脚都是独立的,都有相应的寄存器来控制引脚工作模式与数据。每个引脚的I/O类型可由软件独立地配置为输入,输出,开漏或准双向模式。每个I/O引脚配有一个非常弱的独立的上拉电阻,VDD从5.0V 到 2.5V时,内部弱上拉电阻阻值大约为110千欧~300千欧。

  • 特性
    -4 种 I/O 模式:
    准双向
    推挽输出
    开漏输出
    输入模式带高阻

  • 触发输入模式由Px_MFP[23:16]中的Px_TYPE[15:0]选择

  • 每个I/O 引脚都可以作为中断源,支持边沿/电平触发

  • 所有I/O引脚复位后的默认模式由CIOINI(CONFIG[10])决定

  • NUC029xAN:
    如果 CIOINI 为 0,所有GPIO引脚在芯片复位后为输入三态模式
    如果 CIOINI 为 1,所有GPIO引脚在芯片复位后为准双向模式(默认)
    在复位后,所有引脚的I/O模式都保持为准双向模式,且每个端口数据寄存器
    Px_DOUT[7:0]的值复位为0x000_00FF。

标题功能描述 :

  • 输入模式
    设置 Px_PMD(PMDn[1:0]) 为00’b ,Px.n为输入模式,I/O引脚为三态(高阻态),没有输出驱动能力。Px_PIN 的值反映相应端口引脚的状态。
  • 推挽输出模式
    设置Px_PMD(PMDn[1:0])为 01’b,Px.n为推挽输出模式,I/O引脚支持数字输出功能,有拉电流/灌电流能力。Px_DOUT[n] 相应位的值被送到相应引脚上
    在这里插入图片描述
  • 开漏输出模式
    设置 Px_PMD(PMDn[1:0])为 10’b,Px.n为开漏模式,I/O支持数字输出功能,但仅有灌电流能力,
    为了把I/O引脚拉到高电平状态,需要外接一颗上拉电阻。 如果Px_DOUT[n] 相应位的值为“0”,引
    脚上输出低电平. 如果Px_DOUT[n] 相应位的值为“1”, 该引脚由外部上拉电阻控制输出高电平。
    在这里插入图片描述
  • 准双向模式
    设置Px_PMD(PMDn[1:0]) 为 11’b,Px.n引脚为准双向模式,I/O同时支持数字输出和输入功能,但拉电流仅达数百uA。 要实现数字输入功能,需要先将Px_DOUT[n] 相应位置1。若Px_DOUT[n]相应位为”0”,引脚上输出为“低电平”。 若Px_DOUT[n]相应位为”1”,该引脚将检查引脚值,若引脚值为高,没有任何动作,若引脚值为低,该引脚将驱动2个时钟周期的强拉电流,然后关闭强输出驱动,然后引脚状态由内部上拉电阻控制。 需注意的是,准双向模式拉电流的能力只有200uA到30uA,其中VDD由5.0 V 到 2.5 V。
    在这里插入图片描述
  • GPIO 中断和唤醒功能
    通过设置Px_IEN 和 Px_IMD寄存器,每个GPIO引脚都可以设置为中断源。有5种类型的中断条件可以选择:低电平触发、高电平触发、下降沿触发、上升沿触发、上升和下降沿都触发。对于边沿触发,用户可以使能输入信号去抖动功能来避免由干扰导致的不期望的中断发生。de-bounce 时钟源和采样周期可以由DBNCECON 寄存器设定。
四种模式:
GPIO_PMD_INPUT           输入模式
GPIO_PMD_OUTPUT          输出模式(推挽输出,有电流驱动能力)
GPIO_PMD_OPEN_DRAIN      开漏输出模式
GPIO_PMD_QUASI           准双向模式

中断:
GPIO_INT_RISING         上升沿触发
GPIO_INT_FALLING        下降沿触发
GPIO_INT_BOTH_EDGE      上升下降沿触发
GPIO_INT_HIGH           高电平触发
GPIO_INT_LOW            低电平触发

函数描述:用于设置指定的GPIO操作模式
参数:  port        端口P0, P1, P2, P3 or P4.
参数:  u32PinMask  具体引脚BIT0 ~ BIT7.
参数:  u32Mode     四种模式
void GPIO_SetMode(GPIO_T *port, uint32_t u32PinMask, uint32_t u32Mode)

函数描述:使能GPIO中断
参数:   port            P0, P1, P2, P3 or P4.
参数:   u32Pin          引脚号码0 ~ 7
参数:   u32IntAttribs   中断触发
void GPIO_EnableInt(GPIO_T *port, uint32_t u32Pin, uint32_t u32IntAttribs)

函数描述:失能GPIO中断
参数:   port            P0, P1, P2, P3 or P4.
参数:   u32Pin          引脚号码0 ~ 7
void GPIO_DisableInt(GPIO_T *port, uint32_t u32Pin)
函数描述:获取GPIO中断标志
GPIO_GET_INT_FLAG(port, u32PinMask)

函数描述:清除GPIO中断标志
GPIO_CLR_INT_FLAG(port, u32PinMask)

函数描述:失能中断消抖功能
GPIO_DISABLE_DEBOUNCE(port, u32PinMask)

函数描述:使能中断消抖功能
GPIO_ENABLE_DEBOUNCE(port, u32PinMask)

函数描述:设置消抖采样采样周期、时间
GPIO_SET_DEBOUNCE_TIME(u32ClkSrc, u32ClkSel)



//初始化
Void GPIO_Init()
{
	/* P10 配置为输出,P24 配置为输入模式 */
	GPIO_SetMode(P1, 0, GPIO_PMD_OUTPUT);
	GPIO_SetMode(P2, 4, GPIO_PMD_INPUT);
	/* P10 配置为输出*/
	GPIO_SetMode(P1, 0, GPIO_PMD_OUTPUT);
	
	/*从P10输出0*/
	P10 = 0;

   /*如果P11为低电平,P12输出高电平*/
	if(P11 == 0)
		P12 = 1;
	
	/* 将 P25 配置为输入模式并使能上升沿中断 */ 
	GPIO_SetMode(P2, 5, GPIO_PMD_INPUT);
	GPIO_EnableInt(P2, 5, GPIO_INT_RISING);
	NVIC_EnableIRQ(GPIO_P2P3P4_IRQn);
	
	/*  将 P12 配置为输入模式,打开内部上拉,并使能下降沿中断 */
	GPIO_SetMode(P1, 2, GPIO_PMD_INPUT);
	
	GPIO_EnableInt(P1, 2, GPIO_INT_FALLING);
	NVIC_EnableIRQ(GPIO_P0P1_IRQn);
	}
	
	//中断服务函数
	void GPIOP2P3P4_IRQHandler()
	{
		if(GPIO_GET_INT_FLAG(P2, BIT0))
		{
			GPIO_CLR_INT_FLAG(BIT0);
			
		}
		else//清除其他端口不必要的中断
		{
		P2->ISRC = P2->ISRC;
		P3->ISRC = P3->ISRC;
		P4->ISRC = P4->ISRC;
		}
	}

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!感谢提问。下面是有关 K210 学习笔记五中串口通信的一些内容: 在 K210 开发板上,串口是一种常见的通信接口,用于将数据从一个设备传输到另一个设备。串口通信通常使用 UART (Universal Asynchronous Receiver/Transmitter) 协议。 要在 K210 上进行串口通信,首先需要使用两个引脚:一个用于接收数据(RX),一个用于发送数据(TX)。这些引脚可以通过 GPIO 端口与外部设备连接。 在 K210 的开发环境中,可以使用 MaixPy 或者 Kendryte Standalone SDK 进行串口编程。 在 MaixPy 中,可以使用 `uart` 模块来进行串口通信。例如,要初始化一个串口对象并设置波特率为 115200,可以使用以下代码: ```python from machine import UART uart = UART(UART.UART1, 115200) ``` 然后,可以使用 `uart.write()` 函数发送数据,使用 `uart.read()` 函数接收数据。例如: ```python uart.write("Hello, world!\n") data = uart.read(10) ``` 在 Kendryte Standalone SDK 中,可以使用 `uart.h` 头文件中的函数来进行串口通信。例如,要初始化一个串口对象并设置波特率为 115200,可以使用以下代码: ```c #include "uart.h" uart_init(UART_DEVICE_1, 115200); ``` 然后,可以使用 `uart_send_data()` 函数发送数据,使用 `uart_receive_data()` 函数接收数据。例如: ```c uart_send_data(UART_DEVICE_1, "Hello, world!\n", 14); char buffer[10]; uart_receive_data(UART_DEVICE_1, buffer, 10); ``` 以上是关于 K210 学习笔记五中串口通信的简要介绍。如果你有更具体的问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值