标签:ice gpo div data 保留 ati sse 内容 包含
1 /*! 2 * COPYRIGHT NOTICE 3 * Copyright (c) 2013,野火科技 4 * All rights reserved. 5 * 技术讨论:野火初学论坛 http://www.chuxue123.com 6 * 7 * 除注明出处外,以下所有内容版权均属野火科技所有,未经允许,不得用于商业用途, 8 * 修改内容时必须保留野火科技的版权声明。 9 * 10 * @file MK60_gpio.c 11 * @brief gpio驱动函数 12 * @author 野火科技 13 * @version v5.0 14 * @date 2013-06-26 15 */ 16 17 /* 18 * 包含头文件 19 */ 20 #include "common.h" 21 #include "MK60_port.h" 22 #include "MK60_gpio.h" 23 24 /* 25 * 定义数组 26 */ 27 GPIO_MemMapPtr GPIOX[PTX_MAX] = {PTA_BASE_PTR, PTB_BASE_PTR, PTC_BASE_PTR, PTD_BASE_PTR, PTE_BASE_PTR}; //定义五个指针数组保存 GPIOX 的地址 28 29 30 31 /*! 32 * @brief 初始化gpio 33 * @param PTxn 端口 34 * @param cfg 引脚方向,0=输入,1=输出 35 * @param data 输出初始状态,0=低电平,1=高电平 (对输入无效) 36 * @since v5.0 37 * Sample usage: gpio_init (PTA8, GPI,0); //初始化 PTA8 管脚为输入 38 */ 39 void gpio_init (PTXn_e ptxn, GPIO_CFG cfg, uint8 data) 40 { 41 //复用管脚为GPIO功能 42 port_init( ptxn, ALT1); 43 44 //端口方向控制输入还是输出 45 if( cfg == GPI ) 46 { 47 //设置端口方向为输入 48 GPIO_PDDR_REG(GPIOX_BASE(ptxn)) &= ~(1 << PTn(ptxn)); // GPIO PDDR 管脚号 清0,即对应管脚配置为端口方向输入 49 } 50 else 51 { 52 //设置端口方向为输出 53 GPIO_PDDR_REG(GPIOX_BASE(ptxn)) |= (1 << PTn(ptxn)); // GPIO PDDR 管脚号 置1,即对应管脚配置为端口方向输出 54 55 //端口输出数据 56 if(data == 0) 57 { 58 GPIO_PDOR_REG(GPIOX_BASE(ptxn)) &= ~(1 << PTn(ptxn)); // GPIO PDOR 管脚号 清0,即对应管脚配置为端口输出低电平 59 } 60 else 61 { 62 GPIO_PDOR_REG(GPIOX_BASE(ptxn)) |= (1 << PTn(ptxn)); // GPIO PDOR 管脚号 置1,即对应管脚配置为端口输出高电平 63 } 64 } 65 } 66 67 /*! 68 * @brief 设置引脚数据方向 69 * @param PTxn 端口 70 * @param cfg 引脚方向,0=输入,1=输出 71 * @since v5.0 72 * Sample usage: gpio_ddr (PTA8, GPI); //设置 PTA8 管脚为输入 73 */ 74 void gpio_ddr (PTXn_e ptxn, GPIO_CFG cfg) 75 { 76 //端口方向控制输入还是输出 77 if( cfg == GPI ) 78 { 79 //设置端口方向为输入 80 GPIO_PDDR_REG(GPIOX_BASE(ptxn)) &= ~(1 << PTn(ptxn)); // GPIO PDDR 管脚号 清0,即对应管脚配置为端口方向输入 81 } 82 else 83 { 84 //设置端口方向为输出 85 GPIO_PDDR_REG(GPIOX_BASE(ptxn)) |= (1 << PTn(ptxn)); // GPIO PDDR 管脚号 置1,即对应管脚配置为端口方向输出 86 } 87 } 88 89 /*! 90 * @brief 设置引脚状态 91 * @param PTxn 端口 92 * @param data 输出初始状态,0=低电平,1=高电平 (对输入无效) 93 * @since v5.0 94 * @warning 务必保证数据方向为输出(DEBUG模式下,有断言进行检测) 95 * Sample usage: gpio_set (PTA8, 1); // PTA8 管脚 输出 1 96 */ 97 void gpio_set (PTXn_e ptxn, uint8 data) 98 { 99 ASSERT( BIT_GET( GPIO_PDDR_REG(GPIOX_BASE(ptxn)) , PTn(ptxn)) == GPO ); // 断言,检测 输出方向是否为输出 100 // 获取 GPIO PDDR 管脚号 ,比较是否为输出 101 102 //端口输出数据 103 if(data == 0) 104 { 105 GPIO_PDOR_REG(GPIOX_BASE(ptxn)) &= ~(1 << PTn(ptxn)); // GPIO PDOR 管脚号 清0,即对应管脚配置为端口输出低电平 106 } 107 else 108 { 109 GPIO_PDOR_REG(GPIOX_BASE(ptxn)) |= (1 << PTn(ptxn)); // GPIO PDOR 管脚号 置1,即对应管脚配置为端口输出高电平 110 } 111 } 112 113 114 /*! 115 * @brief 反转引脚状态 116 * @param PTxn 端口 117 * @since v5.0 118 * @warning 务必保证数据方向为输出(DEBUG模式下,有断言进行检测) 119 * Sample usage: gpio_turn (PTA8); // PTA8 管脚 输出 反转 120 */ 121 void gpio_turn (PTXn_e ptxn) 122 { 123 ASSERT( BIT_GET( GPIO_PDDR_REG(GPIOX_BASE(ptxn)) , PTn(ptxn)) == GPO ); // 断言,检测 输出方向是否为输出 124 // 获取 GPIO PDDR 管脚号 ,比较是否为输出 125 126 GPIO_PTOR_REG( GPIOX_BASE(ptxn)) = 1 << (PTn(ptxn )); // GPIO PTOR ptxn 置1,其他清0 ,即对应管脚配置为端口输出反转,其他位不变 127 // 此处不能用 BIT_SET 这个宏来置1 ,因为必须保证其他位 不变,其他位直接清0即可 128 } 129 130 /*! 131 * @brief 读取引脚输入状态 132 * @param PTxn 端口 133 * @return 管脚的状态,1为高电平,0为低电平 134 * @since v5.0 135 * @warning 务必保证数据方向为输入(DEBUG模式下,有断言进行检测) 136 * Sample usage: uint8 pta8_data = gpio_get (PTA8); // 获取 PTA8 管脚 输入电平 137 */ 138 uint8 gpio_get(PTXn_e ptxn) 139 { 140 ASSERT( BIT_GET( GPIO_PDDR_REG(GPIOX_BASE(ptxn)) , PTn(ptxn)) == GPI ); // 断言,检测 输出方向是否为输入 141 // 获取 GPIO PDDR 管脚号 ,比较是否为输入 142 143 return ((GPIO_PDIR_REG(GPIOX_BASE(ptxn)) >> PTn(ptxn )) & 0x01); // 获取 GPIO PDIR ptxn 状态,即读取管脚输入电平 144 }
标签:ice gpo div data 保留 ati sse 内容 包含
原文地址:http://www.cnblogs.com/scrazy/p/7856009.html