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

📄 i2c_fun.c

📁 I2C testing sample code
💻 C
字号:
#define I2C_FUN_GLOBAL
#include <stdio.h>
#include <stdlib.h>
#include "string.h"
#include "I2C_test.h"
#include "fLib.h"
#include "I2C.h"			//library


//#define DEBUG
#define TOKEN_MAX			20
#define TOKEN_LEN			10

int substring(int **argv, char * string, char * char_list)
{
	int i, j;
	char token[0x30];
	char c;
	int c_num = 0;
	int first_time =1;
	int num_in_ptr;

	while ((c = *char_list) != '\0')
	{
		token[c_num] = c;
		c_num ++;
		char_list ++;
	}
	if (c_num == 0)
		return 0;
	i = 0;
	while ((c = *string) != '\0')
	{
		if (first_time) {
			argv[i] = string;
			num_in_ptr = 0;
			first_time = 0;
		}
		for (j = 0; j < c_num; j ++) {
			if (c == token[j]) {
				if (num_in_ptr != 0)
					i ++;
				first_time = 1;
				break;
			}
		}
		num_in_ptr ++;
		string ++;
	}
	// last one
	if (num_in_ptr != 0)
		i ++;
	return i;
}


#define I2C_MAX_FREQ	(50 * 1024)//(100 * 1024)
extern unsigned int PMU_get_pclk(void);
void I2C_init(void)
{
	UINT32 i;
	UINT32 SCLout;

	//setting PCLK clock cycles
//	fLib_I2C_SetTGSR(I2C_GSR_Value,I2C_TSR_Value);

	//set clock divider
	SCLout = PMU_get_pclk() /10;	// PCLK must 10 times of SCLout
	if (SCLout > I2C_MAX_FREQ)
		SCLout = I2C_MAX_FREQ;		// max. clock is 400KHz

	// SCLout = PCLK/((2*i - GSR + 1) * 2)
	// ==> i = (PCLK/SCLout + GSR - 1 + 1)/2
	i = (((PMU_get_pclk()+ SCLout - 1) / SCLout) +
		 ((I2C_GSR_Value & (BIT12 | BIT11 | BIT10)) >> 10) -
		 1 + 1													)/2;
	if (i >= BIT10) {
		printf("Pclk is to fast to form i2c clock, exit \n");
		return;
	}
	fLib_I2C_SetClockdiv(i);
}

// --------------------------------------------------------------------
//	input
//		time_out ==> 

⌨️ 快捷键说明

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