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 + -
显示快捷键?