cy7c67200_300_lcd.c

来自「linux嵌入式课程实践中的一个关于声卡驱动程序 。」· C语言 代码 · 共 2,069 行 · 第 1/5 页

C
2,069
字号
 *    cy_private_data - Private data structure pointer * *  DESCRIPTION: *    This function reads data from the specfied external address and length *    through the ASIC. * *  RETURNS:  *    SUCCESS         - Success *    Error           - Failure */int lcd_read_xmemory(unsigned short xmem_addr,                     unsigned short byte_length,                     char * data,                     lcd_callback_t funcptr,                     int opt_arg,                     cy_priv_t * cy_private_data){    int response = ERROR;    lcd_lcp_entry_t * lcp;    /* Only allow reads of 32 bytes or less */    if (byte_length > 32)        return (response);    /* Set Xmemory Address */    lcd_hpi_write_word(COMM_MEM_ADDR, xmem_addr, cy_private_data);        /* Set data length */    lcd_hpi_write_word(COMM_MEM_LEN, byte_length, cy_private_data);    /* Build LCP entry */    lcp = lcd_create_lcp_entry(COMM_READ_XMEM,                               0,0,0,0,0,                               0,0,0,0,0,                               0,0,0,0,0,                               data,(int) byte_length,                               funcptr,                                opt_arg,                                cy_private_data);    /* Add lcp Entry */    if (lcp != NULL)        response = lcd_add_lcp_entry(lcp, cy_private_data);    return(response);}/* *  FUNCTION: lcd_write_xmemory * *  PARAMETERS: *    xmen_addr       - Offset Address of the external memory on the ASIC *    byte_length     - Length of data to write *    data            - Data to write pointer *    funcptr         - Function (Callback) to call when the write completes *    opt_arg         - Optional argument to pass to the Callback Function *    cy_private_data - Private data structure pointer * *  DESCRIPTION: *    This function writes data to the specfied external address and length *    through the ASIC. * *  RETURNS:  *    SUCCESS         - Success *    Error           - Failure */int lcd_write_xmemory(unsigned short xmem_addr,                       unsigned short byte_length,                      char * data,                      lcd_callback_t funcptr,                      int opt_arg,                      cy_priv_t * cy_private_data){    int response = ERROR;    lcd_lcp_entry_t * lcp;    /* Only allow writes of 32 bytes or less */    if (byte_length > 32)        return (response);    /* Write Xmemory */    /* Set Xmemory Address */    lcd_hpi_write_word(COMM_MEM_ADDR, xmem_addr, cy_private_data);        /* Set data length */    lcd_hpi_write_word(COMM_MEM_LEN, byte_length, cy_private_data);    /* Write Data */    lcd_hpi_write_words(COMM_XMEM_BUF, (unsigned short *) data,                         (byte_length/2), cy_private_data);    /* Build LCP entry */    lcp = lcd_create_lcp_entry(COMM_WRITE_XMEM,                               0,0,0,0,0,                               0,0,0,0,0,                               0,0,0,0,0,                               0,0,funcptr,                               opt_arg,                                cy_private_data);    /* Add lcp Entry */    if (lcp != NULL)        response = lcd_add_lcp_entry(lcp, cy_private_data);    return(response);}/* *  FUNCTION: lcd_read_reg * *  PARAMETERS: *    reg_addr        - Offset Register Address of the ASIC *    reg_value       - Register Value pointer *    cy_private_data - Private data structure pointer * *  DESCRIPTION: *    This function reads data from the specified register address *    on the ASIC. * *  RETURNS:  *    SUCCESS         - Success *    Error           - Failure */int lcd_read_reg(unsigned short reg_addr,                 unsigned short *reg_value,                 cy_priv_t * cy_private_data){    //lcd_lcp_entry_t * lcp;    /* Hardware Specific Code to Write to Lyberty via HPI Port */    *reg_value = lcd_hpi_read_word(reg_addr, cy_private_data);    return (SUCCESS);}/* *  FUNCTION: lcd_write_reg * *  PARAMETERS: *    reg_addr        - Offset Register Address of the ASIC *    reg_value       - Register Value *    cy_private_data - Private data structure pointer * *  DESCRIPTION: *    This function writes data to the specified register address *    on the ASIC. * *  RETURNS:  *    SUCCESS         - Success *    Error           - Failure */int lcd_write_reg(unsigned short reg_addr,                  unsigned short reg_value,                  cy_priv_t * cy_private_data){    //lcd_lcp_entry_t * lcp;    /* Hardware Specific Code to Write to Lyberty via HPI Port */    lcd_hpi_write_word(reg_addr, reg_value, cy_private_data);    return (SUCCESS);}/* *  FUNCTION: lcd_exec_interrupt * *  PARAMETERS: *    int_data        - Integer Data structure pointer *    funcptr         - Function (Callback) to call when the execute interrupt *                      completes *    opt_arg         - Optional argument to pass to the Callback Function *    cy_private_data - Private data structure pointer * *  DESCRIPTION: *    This function executes the specificed interrupt handler on the ASIC. * *  RETURNS:  *    SUCCESS         - Success *    Error           - Failure */int lcd_exec_interrupt(lcd_int_data_t *int_data,                       lcd_callback_t funcptr,                       int opt_arg,                       cy_priv_t * cy_private_data){    int response = ERROR;    lcd_lcp_entry_t * lcp;    lcp = lcd_create_lcp_entry(COMM_EXEC_INT, int_data->int_num,                                int_data->reg[0], int_data->reg[1],                                int_data->reg[2], int_data->reg[3],                               int_data->reg[4], int_data->reg[5],                                int_data->reg[6], int_data->reg[7],                                int_data->reg[8], int_data->reg[9],                                int_data->reg[10], int_data->reg[11],                                int_data->reg[12], int_data->reg[13],                                0, 0, funcptr, opt_arg, cy_private_data);    /* Add lcp Entry */    if (lcp != NULL)        response = lcd_add_lcp_entry(lcp, cy_private_data);    return response;}/* *  FUNCTION: lcd_download_code * *  PARAMETERS: *    chip_addr       - Offset Address of the ASIC *    byte_length     - Length of data to download (write) *    data            - Data to download pointer *    funcptr         - Function (Callback) to call when the download completes *    opt_arg         - Optional argument to pass to the Callback Function *    cy_private_data - Private data structure pointer * *  DESCRIPTION: * *  RETURNS:  *    SUCCESS         - Success *    ERROR           - Failure */int lcd_download_code(unsigned short chip_addr,                      int byte_length,                      char * data,                      lcd_callback_t funcptr,                      int opt_arg,                      cy_priv_t * cy_private_data){    int response = ERROR;    lcd_lcp_entry_t * lcp;    if (byte_length > 0) {        //cy_dbg_on = 0;        response = lcd_write_memory(chip_addr, byte_length, data,                                     cy_private_data);        //cy_dbg_on = 1;        if ( response == SUCCESS) {            lcp = lcd_create_lcp_entry(COMM_JUMP2CODE,                                       chip_addr,0,0,0,0,                                       0,0,0,0,0,                                       0,0,0,0,0,                                       0,0,funcptr,                                       opt_arg,                                       cy_private_data);            if (lcp != NULL)                response = lcd_add_lcp_entry(lcp, cy_private_data);        }    }    return response;}/* *  FUNCTION: lcd_hpi_write_status_reg * *  PARAMETERS: *    value           - Length *    cy_private_data - Private data structure pointer * *  DESCRIPTION: *    This function writes to the hpi mailbox * *  RETURNS:  *    SUCCESS         - Success *    Error           - Failure */void lcd_hpi_write_status_reg(unsigned short value,                       cy_priv_t * cy_private_data){    cy_dbg("write_status_reg: addr = 0x%x, value = 0x%04x",            HPI_STAT_ADDR  + cy_private_data->cy_addr, value);    outw (value, HPI_STAT_ADDR  + cy_private_data->cy_addr);}/* *  FUNCTION: lcd_hpi_read_status_reg * *  PARAMETERS: *    cy_private_data - Private data structure pointer * *  DESCRIPTION: *    This function reads from the hpi status register * *  RETURNS:  *    SUCCESS         - Success *    Error           - Failure */unsigned short lcd_hpi_read_status_reg(cy_priv_t * cy_private_data){    unsigned short value;    value = inw(HPI_STAT_ADDR + cy_private_data->cy_addr);    cy_dbg("read_status_reg: addr = 0x%x, value = 0x%04x",            HPI_STAT_ADDR  + cy_private_data->cy_addr, value);    return value;}/* *  FUNCTION: lcd_hpi_write_mbx * *  PARAMETERS: *    value           - Length *    cy_private_data - Private data structure pointer * *  DESCRIPTION: *    This function writes to the hpi mailbox * *  RETURNS:  *    SUCCESS         - Success *    Error           - Failure */void lcd_hpi_write_mbx(unsigned short value,                       cy_priv_t * cy_private_data){    cy_dbg("write_mbx: 0x%04x", value);    outw (value, HPI_MBX_ADDR + cy_private_data->cy_addr);}/* *  FUNCTION: lcd_hpi_read_mbx * *  PARAMETERS: *    cy_private_data - Private data structure pointer * *  DESCRIPTION: *    This function reads from hpi * *  RETURNS:  *    SUCCESS         - Success *    Error           - Failure */unsigned short lcd_hpi_read_mbx(cy_priv_t * cy_private_data){    unsigned short value;    value = inw(HPI_MBX_ADDR + cy_private_data->cy_addr);    cy_dbg("read_mbx: 0x%04x", value);    return value;}/* *  FUNCTION: lcd_hpi_write_word * *  PARAMETERS: *    chip_addr       - Offset Address of the ASIC *    value           - Value to write *    cy_private_data - Private data structure pointer * *  DESCRIPTION: *    This function writes to hpi * *  RETURNS:  *    SUCCESS         - Success *    Error           - Failure */void lcd_hpi_write_word(unsigned short chip_addr,                        unsigned short value,                        cy_priv_t * cy_private_data){    spinlock_t lock;    unsigned long int_flags;    cy_dbg("write_word: addr=0x%04x, value=0x%04x", chip_addr, value);    spin_lock_irqsave(&lock, int_flags);        outw (chip_addr, HPI_ADDR_ADDR + cy_private_data->cy_addr);        outw (value, HPI_DATA_ADDR + cy_private_data->cy_addr);    spin_unlock_irqrestore(&lock, int_flags);}/* *  FUNCTION: lcd_hpi_read_word * *  PARAMETERS: *    chip_addr       - Offset Address of the ASIC *    cy_private_data - Private data structure pointer * *  DESCRIPTION: *    This function reads from hpi * *  RETURNS:  *    SUCCESS         - Success *    Error           - Failure */unsigned short lcd_hpi_read_word(unsigned short chip_addr,                                 cy_priv_t * cy_private_data){    unsigned short value;    spinlock_t lock;    unsigned long int_flags;    spin_lock_irqsave(&lock, int_flags);

⌨️ 快捷键说明

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