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

📄 bal.c

📁 USB Host 资料
💻 C
字号:
#include "cy7c67200_300.h"

typedef unsigned short uint16;

#define WRITE_REGISTER(address, value)  (*(volatile uint16 *) (address)) = ( (uint16) (value) )
#define READ_REGISTER(address)          (*(volatile uint16 *) (address))
#define INPLACE_OR(address, value)  __asm( "or [%0], %1" : : "p" ((address)), "g" ((value)) )
#define INPLACE_AND(address, value)  __asm( "and [%0], %1" : : "p" ((address)), "g" ((value)) )


void writeCPLDADX(uint16 address)
{
    INPLACE_AND(GPIO1_OUT_DATA_REG, ~0x0008);   /* A0 = 0 */
    INPLACE_AND(GPIO1_OUT_DATA_REG, ~0x0020);   /* nCS = 0 */
    INPLACE_AND(GPIO1_OUT_DATA_REG, ~0x0040);   /* nWR = 0 */
    
    INPLACE_OR(GPIO0_DIR_REG, 0x00FF);          /*Write Address*/
    WRITE_REGISTER(GPIO0_OUT_DATA_REG, address);
    
    INPLACE_OR(GPIO1_OUT_DATA_REG, 0x0040);     /* nWR = 1 */
    INPLACE_OR(GPIO1_OUT_DATA_REG, 0x0020);     /* nCS = 1 */
    INPLACE_OR(GPIO1_OUT_DATA_REG, 0x0008);     /* A0 = 1 */

}     

void writeCPLDDATA(uint16 data)
{

    INPLACE_OR(GPIO1_OUT_DATA_REG, 0x0008);     /* A0 = 1 */
    INPLACE_AND(GPIO1_OUT_DATA_REG,~0x0020);    /* nCS = 0 */
    INPLACE_AND(GPIO1_OUT_DATA_REG, ~0x0040);   /* nWR = 0 */
    
    INPLACE_OR(GPIO0_DIR_REG, 0x00FF);          /*Write Address*/
    WRITE_REGISTER(GPIO0_OUT_DATA_REG, data);
    
    INPLACE_OR(GPIO1_OUT_DATA_REG, 0x0040);     /* nWR = 1 */
    INPLACE_OR(GPIO1_OUT_DATA_REG, 0x0020);     /* nCS = 1 */
    INPLACE_OR(GPIO1_OUT_DATA_REG, 0x0008);     /* A0 = 1 */

}

int readCPLDDATA()
{
    uint16 data;
    
    INPLACE_OR(GPIO1_OUT_DATA_REG, 0x0008);	    /* A0 = 1 */
    INPLACE_AND(GPIO1_OUT_DATA_REG, ~0x0020);   /* nCS = 0 */
    INPLACE_AND(GPIO1_OUT_DATA_REG, ~0x0080);   /* nRD = 0 */
    
    INPLACE_AND(GPIO0_DIR_REG, 0xFF00);         /*Write Address*/
    data = (READ_REGISTER(GPIO0_IN_DATA_REG) & 0x00FF);
        
    INPLACE_OR(GPIO1_OUT_DATA_REG, 0x0080);     /* nWR = 1 */
    INPLACE_OR(GPIO1_OUT_DATA_REG, 0x0020);     /* nCS = 1 */
    
    return data;

}

void writeCPLD(int address, int data)
{
    writeCPLDADX(address);
    writeCPLDDATA(data);  
}

int readCPLD(int address)
{
    writeCPLDADX(address);
    return readCPLDDATA();  
}

int main()
{
    uint16 button_read = 0;
    
    INPLACE_AND(UART_CTL_REG, 0xFE);            /* Disable UART to free up GPIO 6 & 7 on EZ-OTG for CPLD*/
    
    INPLACE_OR(GPIO0_OUT_DATA_REG, 0x00FF);     /* Data Port */
    INPLACE_OR(GPIO1_OUT_DATA_REG, 0x00E8);     /* A0 = nCS = nRD = nWR = 1 */
    INPLACE_OR(GPIO0_DIR_REG, 0x00FF);
    INPLACE_OR(GPIO1_DIR_REG, 0x00FF);
    
 while(1)   {
    
    button_read = readCPLD(0x0000);		        /* Read Buttons */ 

    if((button_read & 0x01) == 0)   {	        /* If Button S1 (PB_UP) is pressed, turn LEDs OFF */
      writeCPLD(0x7, 0xFF);
      writeCPLD(0x1, 0xFF);				        /* Clear Button S1 Status */
    }
      
    if((button_read & 0x08) == 0)   {	        /* If Button S5 (PB_DN) is pressed, turn LEDs ON */
      writeCPLD(0x7, 0x00);
      writeCPLD(0x4, 0xFF);				        /* Clear Button S5 Status */
    }   
   
    }
    
}

⌨️ 快捷键说明

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