⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 config_pad_mode.c

📁 freescale atk source code
💻 C
字号:
#include "config_pad_mode.h"// ###########################################################// # Functions : 'config_pad_mode' , 'config_pad_settings' . #// ###########################################################//  SW_MUX_CTL configuration// **************************// The function 'config_pad_mode',configures the iomux/iomuxc// of a specific pad to a desired mode. // Meaning it determines the IN and OUT controls to the iomux so that // The proper signal will be routed in/out.// The input and output mode are independent of each other,// and therfore are configured seperately.// For instance , if we would like to configure pad 'I2C_CLK' as 'functional'// in the output mode and 'alternate1' in the input mode we would simply give the following command :// config_pad_mode(I2C_CLK,func_out,alt1_in);// Moreover , there's a possibility to configure a pad to route an input signal // to several modes in parallel. // This can be done using one of the defines in 'functions.h', as the input mode: WORD get_mixed_mode (WORD byte_in_reg,WORD output_mode,WORD input_mode) {   WORD mixed_mode;   switch (byte_in_reg) {      case  0:mixed_mode=(input_mode+output_mode);			  break;      case  1:mixed_mode=(input_mode+output_mode)*0x100;			  break;      case  2:mixed_mode=(input_mode+output_mode)*0x10000;    	 	      break;      case  3:mixed_mode=(input_mode+output_mode)*0x1000000; 			  break;   }     return mixed_mode;}		void config_pad_mode(WORD pad_name,WORD output_mode,WORD input_mode) {   WORD wdata,reg_addr,offset;   int pad_offset;   pad_offset=(328-pad_name)/4;   offset=pad_offset*4;   reg_addr=IOMUXC_BASE_ADDR+offset+0xc;      switch (pad_name%4) {	  case 0: wdata=get_mixed_mode(0,output_mode,input_mode);              reg32_write_mask(reg_addr,wdata,BYTE0_MASK);			  break;	  case 1: wdata=get_mixed_mode(3,output_mode,input_mode);              reg32_write_mask(reg_addr,wdata,BYTE3_MASK);			  break;	  case 2: wdata=get_mixed_mode(2,output_mode,input_mode);              reg32_write_mask(reg_addr,wdata,BYTE2_MASK);			  break;	  case 3: wdata=get_mixed_mode(1,output_mode,input_mode);              reg32_write_mask(reg_addr,wdata,BYTE1_MASK);			  break;      default : 	break;//verilog_trigger(arm_vt_error);   }}//############################################################################//  SW_PAD_CTL configuration// **************************// The 'config_pad_settings' function configures a pad's physical settings// such as : open drain , pull up/down , schmidt trigger etc.// by writing to the appropriate 10 bits of a specific // 32-bit 'SW_PAD_CTL' register in the iomuxc.// The activation of this function is done as follows :// config_pad_settings(<pad_name>,<data_to_write);// Here the user must know excatly which bit of the 10 bits controls which feature.// This information is listed below :// # fast/slow buffer enable (slew rate)  // ipp_sre - 0// # drive strength          // ipp_dse0 - 1// ipp_dse1 - 2// # open drain enable        // ipp_ode - 3// # hysteresis enable        // ipp_hys - 4// # sw pull up/down configurat// ipp_pus1 - 5// ipp_pus0 - 6// # pull up/down enable       // ipp_pue - 7// # pull/keep select          // ipp_pke - 8// # loop back// sw_input_on - 9 void config_pad_settings(WORD pad_name,WORD wdata) {   WORD shifted_wdata,offset,reg_addr;   int pad_offset;      pad_offset=(330-pad_name)/3;   offset=pad_offset*4;   reg_addr=IOMUXC_BASE_ADDR+offset+0x154;   switch (pad_name%3) {	  case 0: shifted_wdata=wdata;              reg32_write_mask(reg_addr,shifted_wdata,PAD0_MASK);       	      break;      case 1: shifted_wdata=wdata*0x100000;              reg32_write_mask(reg_addr,shifted_wdata,PAD2_MASK);       	      break;      case 2: shifted_wdata=wdata*0x400;              reg32_write_mask(reg_addr,shifted_wdata,PAD1_MASK);       	      break;      default :        	      break;//verilog_trigger(arm_vt_error);   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -