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

📄 aaa.c.bak

📁 LM3S8962 ARM 通过I2C总线读取 Rx8025时钟芯片的程序源码
💻 BAK
字号:

#include "Heads.h"

#define STATE_IDLE         0
#define STATE_WRITE_FINAL  1
#define STATE_SEND_ACK     2
#define STATE_WAIT_ACK     3
#define STATE_READ_ONE     4
#define STATE_READ_WAIT    5


static unsigned char g_pucData = 0;
static volatile unsigned long g_ulState = STATE_IDLE;


void I2C_IntHandler(void)
{
	I2CMasterIntClear(I2C_MASTER_BASE);

    switch(g_ulState)
    {
    	case STATE_IDLE:
        {
            break;
        }

        case STATE_WRITE_FINAL:
        {
            I2CMasterDataPut(I2C_MASTER_BASE, g_pucData);
            I2CMasterControl(I2C_MASTER_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);

            g_ulState = STATE_SEND_ACK;

            break;
        }
        
        case STATE_SEND_ACK:
        {
            I2CMasterSlaveAddrSet(I2C_MASTER_BASE, 0x32, true);
            I2CMasterControl(I2C_MASTER_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE);
            g_ulState = STATE_WAIT_ACK;

            break;
        }

        case STATE_WAIT_ACK:
        {
            if(I2CMasterErr(I2C_MASTER_BASE) == I2C_MASTER_ERR_NONE)
            {
                I2CMasterDataGet(I2C_MASTER_BASE);
                g_ulState = STATE_IDLE;

                break;
            }
        }

        case STATE_READ_ONE:
        {
            I2CMasterSlaveAddrSet(I2C_MASTER_BASE, 0x32, true);
            I2CMasterControl(I2C_MASTER_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE);
            g_ulState = STATE_READ_WAIT;

            break;
        }

        case STATE_READ_WAIT:
        {
            g_pucData = I2CMasterDataGet(I2C_MASTER_BASE);
            g_ulState = STATE_IDLE;

            break;
        }
    }
}


void I2C_RX8025_Write(unsigned char pucData, unsigned long ulOffset)
{
    g_pucData = pucData;  //Send Datas
    

    g_ulState = STATE_WRITE_FINAL;
    I2CMasterSlaveAddrSet(I2C_MASTER_BASE, 0x32, false);
    I2CMasterDataPut(I2C_MASTER_BASE, ulOffset);
    I2CMasterControl(I2C_MASTER_BASE, I2C_MASTER_CMD_BURST_SEND_START);

    while(g_ulState != STATE_IDLE)
    {
    }
}


void I2C_RX8025_Read(unsigned long ulOffset)
{
    g_ulState = STATE_READ_ONE;
    I2CMasterSlaveAddrSet(I2C_MASTER_BASE, 0x32, false);
    I2CMasterDataPut(I2C_MASTER_BASE, ulOffset);
    I2CMasterControl(I2C_MASTER_BASE, I2C_MASTER_CMD_SINGLE_SEND);

    while(g_ulState != STATE_IDLE)
    {
    }
}


int main(void)
{
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ);


    SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
    
    IntMasterEnable();   
    
    
    GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_2 | GPIO_PIN_3);  
    // I2CMasterInitExpClk(I2C_MASTER_BASE, SysCtlClockGet(), false);
    I2CMasterInit(I2C_MASTER_BASE, false);  //100K
    
     
    IntEnable(INT_I2C);
    I2CMasterIntEnable(I2C_MASTER_BASE);

 
    //Config RX8025 CLOCK-------------------------------------------------------------------------
    I2C_RX8025_Write(0x20, 0xe0);
    I2C_RX8025_Write(0x20, 0xf0);
    I2C_RX8025_Write(0x00, 0x70);
    I2C_RX8025_Write(0x00, 0x50);
    
    I2C_RX8025_Write(0x08, 0x00);//sec
    I2C_RX8025_Write(0x08, 0x10);//min
    I2C_RX8025_Write(0x08, 0x20);//hour
    I2C_RX8025_Write(0x08, 0x40);//day
    I2C_RX8025_Write(0x08, 0x50);//month
    I2C_RX8025_Write(0x08, 0x60);//year
    
    while(1)
    {
    //Read RX8025 Clock
    I2C_RX8025_Read(0x00);  //Sec
    // Sec = g_pucData;
    I2C_RX8025_Read(0x10);  //Min
    // Min = g_pucData;
    I2C_RX8025_Read(0x20);  //Hour
    // Hour = g_pucData;
    I2C_RX8025_Read(0x40);  //Day
    // Day = g_pucData;
    I2C_RX8025_Read(0x50);  //Month
    // Month = g_pucData;
    I2C_RX8025_Read(0x60);  //Year
    // Year = g_pucData;
    }
}

⌨️ 快捷键说明

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