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

📄 main.c.bak

📁 测试TI DSP的C6000系列中的I2C能否正常工作
💻 BAK
字号:
/*****************************************************************************
 *
 * Filename: main.c 
 *
 * Description:
 *      
 *
 * Version:
 *      
 *
 * Date: 
 *      
 *
 * Author:
 *      
 *
 *****************************************************************************/ 
/*****************************************************************************
 *
 * History:
 *     
 *
 *****************************************************************************/ 
#include <csl.h>
#include <csl_emifa.h>
#include <csl_i2c.h>
#include <csl_gpio.h>
#include <csl_cache.h>
#include <csl_mcbsp.h>
#include <stdio.h>
#include <math.h>
#include "evmdm642_mcbsp.h"



/* I2C handle */
I2C_Handle EVMDM642_I2C_hI2C;

/* GPIO handle */
GPIO_Handle EVMDM642_GPIO_hGPIO;

static GPIO_Config HS_Gpio_W = {
	0x00000011, /* gpgc */
	0x0000ff00, /* gpen */
	0x0000ff00, /* gdir */
	0x00000050, /* gpval */
	0x00000000, /* gphm */
	0x00000000, /* gplm */
	0x00000030  /* gppol */
};

static GPIO_Config HS_Gpio_R = {
	0x00000011, /* gpgc */
	0x0000ff00, /* gpen */
	0x00000000, /* gdir */
	0x00000050, /* gpval */
	0x00000000, /* gphm */
	0x00000000, /* gplm */
	0x00000030  /* gppol */
};



void DM642_wait(Uint32 delay)
{
    volatile Uint32 i, n;
    
    n = 0;
    for (i = 0; i < delay; i++)
    {
        n = n + 1;
    }
}

void mcbsp0_write(int out_data)   //串口0写
{
   McBSP1_DXR = out_data;
}

int mcbsp0_read()                 //串口0读
{
   int temp;
   temp = McBSP0_DRR;
   return temp;
}

/* Initialize the board APIs */
void DM642_VIDEO_EVM_init()
{
    volatile Uint32 test;
    
    EMIFA_Config emifaCfg0 = {
        EMIFA_FMKS(GBLCTL, EK2RATE, HALFCLK)    |
        EMIFA_FMKS(GBLCTL, EK2HZ, CLK)          |
        EMIFA_FMKS(GBLCTL, EK2EN, ENABLE)       |
        EMIFA_FMKS(GBLCTL, BRMODE, MRSTATUS)    |
        EMIFA_FMKS(GBLCTL, NOHOLD, DISABLE)     |
        EMIFA_FMKS(GBLCTL, EK1HZ, HIGHZ)        |
        EMIFA_FMKS(GBLCTL, EK1EN, ENABLE)       |
        EMIFA_FMKS(GBLCTL, CLK4EN, ENABLE)      |
        EMIFA_FMKS(GBLCTL, CLK6EN, ENABLE),
        
        EMIFA_FMKS(CECTL, WRSETUP, DEFAULT)    |
        EMIFA_FMKS(CECTL, WRSTRB, DEFAULT)     |
        EMIFA_FMKS(CECTL, WRHLD, DEFAULT)      |
        EMIFA_FMKS(CECTL, RDSETUP, DEFAULT)    |
        EMIFA_FMKS(CECTL, TA, DEFAULT)         |
        EMIFA_FMKS(CECTL, RDSTRB, DEFAULT)     |
        EMIFA_FMKS(CECTL, MTYPE, SDRAM64)      |
        EMIFA_FMKS(CECTL, RDHLD, DEFAULT),
        
        EMIFA_FMKS(CECTL, WRSETUP, OF(7))      |
        EMIFA_FMKS(CECTL, WRSTRB, OF(14))      |
        EMIFA_FMKS(CECTL, WRHLD, OF(2))        |
        EMIFA_FMKS(CECTL, RDSETUP, OF(2))      |
        EMIFA_FMKS(CECTL, TA, OF(2))           |
        EMIFA_FMKS(CECTL, RDSTRB, OF(14))      |
        EMIFA_FMKS(CECTL, MTYPE, ASYNC16)       |
        EMIFA_FMKS(CECTL, RDHLD, OF(1)),
        
        EMIFA_FMKS(CECTL, WRSETUP, OF(2))      |
        EMIFA_FMKS(CECTL, WRSTRB, OF(10))      |
        EMIFA_FMKS(CECTL, WRHLD, OF(2))        |
        EMIFA_FMKS(CECTL, RDSETUP, OF(2))      |
        EMIFA_FMKS(CECTL, TA, OF(2))           |
        EMIFA_FMKS(CECTL, RDSTRB, OF(10))      |
        EMIFA_FMKS(CECTL, MTYPE, ASYNC8)      |
        EMIFA_FMKS(CECTL, RDHLD, OF(2)),

        EMIFA_FMKS(CECTL, WRSETUP, OF(2))      |
        EMIFA_FMKS(CECTL, WRSTRB, OF(10))      |
        EMIFA_FMKS(CECTL, WRHLD, OF(2))        |
        EMIFA_FMKS(CECTL, RDSETUP, OF(2))      |
        EMIFA_FMKS(CECTL, TA, OF(2))           |
        EMIFA_FMKS(CECTL, RDSTRB, OF(10))      |
        EMIFA_FMKS(CECTL, MTYPE, SYNC32)       |
        EMIFA_FMKS(CECTL, RDHLD, OF(2)),
        
        EMIFA_FMKS(SDCTL, SDBSZ, 4BANKS)       |
        EMIFA_FMKS(SDCTL, SDRSZ, 12ROW)        |
        EMIFA_FMKS(SDCTL, SDCSZ, 8COL)         |
        EMIFA_FMKS(SDCTL, RFEN, ENABLE)        |
        EMIFA_FMKS(SDCTL, INIT, YES)           |
        EMIFA_FMKS(SDCTL, TRCD, OF(1))         |
        EMIFA_FMKS(SDCTL, TRP, OF(1))          |
        EMIFA_FMKS(SDCTL, TRC, OF(5))          |
        EMIFA_FMKS(SDCTL, SLFRFR, DISABLE),
        
        EMIFA_FMKS(SDTIM, XRFR, OF(0))         |
        EMIFA_FMKS(SDTIM, PERIOD, OF(2075)),
        
        EMIFA_FMKS(SDEXT, WR2RD, OF(1))        |
        EMIFA_FMKS(SDEXT, WR2DEAC, OF(3))      |
        EMIFA_FMKS(SDEXT, WR2WR, OF(1))        |
        EMIFA_FMKS(SDEXT, R2WDQM, OF(3))       |
        EMIFA_FMKS(SDEXT, RD2WR, OF(2))        |
        EMIFA_FMKS(SDEXT, RD2DEAC, OF(3))      |
        EMIFA_FMKS(SDEXT, RD2RD, OF(1))        |
        EMIFA_FMKS(SDEXT, THZP, OF(2))         |
        EMIFA_FMKS(SDEXT, TWR, OF(2))          |
        EMIFA_FMKS(SDEXT, TRRD, OF(0))         |
        EMIFA_FMKS(SDEXT, TRAS, OF(6))         |
        EMIFA_FMKS(SDEXT, TCL, OF(1)),           
        
        EMIFA_CESEC_DEFAULT,

        EMIFA_CESEC_DEFAULT,

        EMIFA_CESEC_DEFAULT,

        EMIFA_FMKS(CESEC, SNCCLK, ECLKOUT2)    |
        EMIFA_FMKS(CESEC, RENEN, READ)         |
        EMIFA_FMKS(CESEC, CEEXT, ACTIVE)       |
        EMIFA_FMKS(CESEC, SYNCWL, 0CYCLE)      |
        EMIFA_FMKS(CESEC, SYNCRL, 3CYCLE)
    };

    I2C_Config i2cCfg = {
        0x0000007f, /* I2COAR -    Not used if master */
        0x00000000, /* I2CIER -    Disable interrupts, use polling */
        0x0000001b, /* I2CCLKL -   Low period for 100KHz operation */
        0x0000001b, /* I2CCLKH -   High period for 100KHz operation */
        0x00000002, /* I2CCNT -    Data words per transmission */
        0x0000001a, /* I2CSAR -    Slave address */
        0x00004680, /* I2CMDR -    Mode */
        0x00000019  /* I2CPSC -    Prescale 300MHz to 12MHz */
    };
        
    /* Initialize CSL */
    CSL_init();
    
    /* Unlock PERCFG through PCFGLOCK */
	*((unsigned int *)0x01b3f018) = 0x10c0010c;
    
    /* Enable VP0-VP2, I2C and McASP0 in PERCFG */
	*((unsigned int *)0x01b3f000) = 0x79;
    
    /* Read back PERCFG */
	test = *((unsigned int *)0x01b3f000);


    
    /* Wait at least 128 CPU cycles */
    DM642_wait(128);

    /* Initialize EMIFA */
    EMIFA_config(&emifaCfg0);

    /* Open I2C handle */
    EVMDM642_I2C_hI2C = I2C_open(I2C_PORT0, I2C_OPEN_RESET);

    /* Configure I2C controller */
    I2C_config(EVMDM642_I2C_hI2C, &i2cCfg);

    /* Take I2C out of reset */        
    I2C_outOfReset(EVMDM642_I2C_hI2C);
    
    /* Open the GPIO handle */
    EVMDM642_GPIO_hGPIO = GPIO_open(GPIO_DEV0, GPIO_OPEN_RESET);

    /* Enable caching of SDRAM */
    CACHE_enableCaching(CACHE_EMIFA_CE00);
    CACHE_enableCaching(CACHE_EMIFA_CE01);
    
}

void mcbsp0_init()  //配置McBSP0为SPI从设备
{
   		//复位串口的收发,禁用时间停止模式
        McBSP0_SPCR = 0x00000000;
        //Sleep(1000);
        //配置SPCR PCR RCR XCR SRGR寄存器       
        McBSP0_RCR  = 0x00040040;  //16bit
        McBSP0_XCR  = 0x00040040;  //16bit   
        //McBSP0_SRGR = 0x20000001;                 
        McBSP0_PCR  = 0x0000000C; 
        //启动采样率发生器
        McBSP0_SPCR = 0x00400000;       
        //Sleep(1000);
        //使能串口的收发,选择时间停止模式
        McBSP0_SPCR = 0x00C10001;  
        //Sleep(1000);

}               

void mcbsp1_init()  //配置McBSP0为SPI主设备
{
   		//复位串口的收发,禁用时间停止模式
        McBSP1_SPCR = 0x00000000;
        //Sleep(1000);
        //配置SPCR PCR RCR XCR SRGR寄存器       
        McBSP1_RCR  = 0x00010040;  
        McBSP1_XCR  = 0x00010040;     
        McBSP1_SRGR = 0x200F010F;                 
        McBSP1_PCR  = 0x00000A7F; 
        //启动采样率发生器
        McBSP1_SPCR = 0x00400000;       
        //Sleep(1000);
        //使能串口的收发,选择时间停止模式
        McBSP1_SPCR = 0x00C11801;  
        //Sleep(1000);

}               

void main()
{
	MCBSP_Handle myhMcbsp0;
	MCBSP_Handle myhMcbsp1;  
	int tmp8,tmp9,tmp10,tmp11,tmp12,tmp13,tmp14,tmp15, tmp,value,i = 0;
	Int16 dataA, dataB;
	Int16 outA, outB;
	DM642_VIDEO_EVM_init();
	
	myhMcbsp0 = MCBSP_open(MCBSP_DEV0, MCBSP_OPEN_RESET);//mcbsp1 
	//mcbsp0_init();
	MCBSP_config(myhMcbsp0,&Mcbsp0);
	MCBSP_enableSrgr(myhMcbsp0);//Enable the McBSP
    MCBSP_enableFsync(myhMcbsp0);
	MCBSP_enableRcv(myhMcbsp0); 
	
	myhMcbsp1 = MCBSP_open(MCBSP_DEV1, MCBSP_OPEN_RESET);//mcbsp1 
	//mcbsp1_init();   
	MCBSP_config(myhMcbsp1,&Mcbsp1);
	MCBSP_enableSrgr(myhMcbsp1);//Enable the McBSP
    MCBSP_enableFsync(myhMcbsp1);
	MCBSP_enableXmt(myhMcbsp1);
	
	
	while(1)
	{
		
		GPIO_config(EVMDM642_GPIO_hGPIO, &HS_Gpio_W);
		GPIO_pinWrite(EVMDM642_GPIO_hGPIO, GPIO_PIN8, i);
		GPIO_pinWrite(EVMDM642_GPIO_hGPIO, GPIO_PIN9, i);
		GPIO_pinWrite(EVMDM642_GPIO_hGPIO, GPIO_PIN10, i);
		GPIO_pinWrite(EVMDM642_GPIO_hGPIO, GPIO_PIN11, i);
		
		i = 1 - i;
		
		GPIO_pinWrite(EVMDM642_GPIO_hGPIO, GPIO_PIN12, i);
		GPIO_pinWrite(EVMDM642_GPIO_hGPIO, GPIO_PIN13, i);
		GPIO_pinWrite(EVMDM642_GPIO_hGPIO, GPIO_PIN14, i);
		GPIO_pinWrite(EVMDM642_GPIO_hGPIO, GPIO_PIN15, i);
		
		GPIO_config(EVMDM642_GPIO_hGPIO, &HS_Gpio_R);
		
		tmp8 = GPIO_pinRead(EVMDM642_GPIO_hGPIO, GPIO_PIN8);
		//printf("GPIO_PIN08 value:%d\n",tmp8);
		
		tmp9 = GPIO_pinRead(EVMDM642_GPIO_hGPIO, GPIO_PIN9);
		//printf("GPIO_PIN09 value:%d\n",tmp9);
		
		tmp10 = GPIO_pinRead(EVMDM642_GPIO_hGPIO, GPIO_PIN10);
		//printf("GPIO_PIN10 value:%d\n",tmp10);
		
		tmp11 = GPIO_pinRead(EVMDM642_GPIO_hGPIO, GPIO_PIN11);
		//printf("GPIO_PIN11 value:%d\n",tmp11);
		
		tmp12 = GPIO_pinRead(EVMDM642_GPIO_hGPIO, GPIO_PIN12);
		//printf("GPIO_PIN12 value:%d\n",tmp12);
		
		tmp13 = GPIO_pinRead(EVMDM642_GPIO_hGPIO, GPIO_PIN13);
		//printf("GPIO_PIN13 value:%d\n",tmp13);
		
		tmp14 = GPIO_pinRead(EVMDM642_GPIO_hGPIO, GPIO_PIN14);
		//printf("GPIO_PIN14 value:%d\n",tmp14);
		
		tmp15 = GPIO_pinRead(EVMDM642_GPIO_hGPIO, GPIO_PIN15);
		//printf("GPIO_PIN15 value:%d\n",tmp15);
		
		printf("GPIO15-GPIO8 value:%d%d%d%d%d%d%d%d\n",tmp15,tmp14,tmp13,tmp12,tmp11,tmp10,tmp9,tmp8);
		
		dataA = 0x02aa;
		dataB = 0x0155;
		outA = 0xc000 & (dataA<<2);
		outB = 0x4000 & (dataB<<2);
		
		tmp = MCBSP_xrdy(myhMcbsp1);
		if(tmp == 0)                      
    		MCBSP_write(myhMcbsp1,outA);
    	
    	tmp = MCBSP_rrdy(myhMcbsp0); 
    	if(tmp == 0)
    	{         
    		value = MCBSP_read(myhMcbsp0);
    		printf("value:%d\n",value);
    	}
    
		
	}
}






⌨️ 快捷键说明

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