//! \brief Launch a copy-back session //! //! \param page_addr absolute recipient page address of the block //! //! \pre <code>nf_init()</code> should have been called before. //! void nfc_copy_back_conf( U32 page_addr ) { nf_wait_busy(); nf_wr_cmd(NF_RANDOM_DATA_INPUT_CMD); nf_wr_addr( 0 ); nf_wr_addr( 0 ); nf_wr_addr( LSB0(page_addr) ); nf_wr_addr( LSB1(page_addr) ); if ( 3==G_N_ROW_CYCLES ) { nf_wr_addr( MSB1(page_addr) ); } nf_wr_cmd(NF_PAGE_PROGRAM_CMD); }
//! \brief Prepare a copy-back session //! //! \param page_addr absolute source page address of the block //! //! \pre <code>nf_init()</code> should have been called before. //! void nf_copy_back_init( U32 page_addr ) { nf_wait_busy(); nf_wr_cmd(NF_READ_CMD); nf_wr_addr( 0 ); nf_wr_addr( 0 ); nf_wr_addr( LSB0(page_addr) ); nf_wr_addr( LSB1(page_addr) ); if ( 3==G_N_ROW_CYCLES ) { nf_wr_addr( MSB1(page_addr) ); } nf_wr_cmd(NF_COPY_BACK_CMD); nf_wait_busy(); }
void cdc_set_line_coding (void) { Usb_ack_setup_received_free(); while(!Is_usb_control_out_received()); Usb_reset_endpoint_fifo_access(EP_CONTROL); LSB0(line_coding.dwDTERate) = Usb_read_endpoint_data(EP_CONTROL, 8); LSB1(line_coding.dwDTERate) = Usb_read_endpoint_data(EP_CONTROL, 8); LSB2(line_coding.dwDTERate) = Usb_read_endpoint_data(EP_CONTROL, 8); LSB3(line_coding.dwDTERate) = Usb_read_endpoint_data(EP_CONTROL, 8); line_coding.bCharFormat = Usb_read_endpoint_data(EP_CONTROL, 8); line_coding.bParityType = Usb_read_endpoint_data(EP_CONTROL, 8); line_coding.bDataBits = Usb_read_endpoint_data(EP_CONTROL, 8); Usb_ack_control_out_received_free(); Usb_ack_control_in_ready_send(); while (!Is_usb_control_in_ready()); // Set the baudrate of the USART { static usart_options_t dbg_usart_options; uint32_t stopbits, parity; if ( line_coding.bCharFormat==0 ) stopbits = USART_1_STOPBIT; else if( line_coding.bCharFormat==1 ) stopbits = USART_1_5_STOPBITS; else stopbits = USART_2_STOPBITS; if ( line_coding.bParityType==0 ) parity = USART_NO_PARITY; else if( line_coding.bParityType==1 ) parity = USART_ODD_PARITY; else if( line_coding.bParityType==2 ) parity = USART_EVEN_PARITY; else if( line_coding.bParityType==3 ) parity = USART_MARK_PARITY; else parity = USART_SPACE_PARITY; // Options for debug USART. dbg_usart_options.baudrate = line_coding.dwDTERate; dbg_usart_options.charlength = line_coding.bDataBits; dbg_usart_options.paritytype = parity; dbg_usart_options.stopbits = stopbits; dbg_usart_options.channelmode = USART_NORMAL_CHMODE; // Initialize it in RS232 mode. usart_init_rs232(DBG_USART, &dbg_usart_options, pcl_freq_param.pba_f); // Enable Rx interrupts DBG_USART->ier = AVR32_USART_IER_RXRDY_MASK; } }
//! cdc_set_line_coding. //! //! @brief This function manages reception of line coding parameters (baudrate...). //! void cdc_set_line_coding (void) { Usb_ack_receive_setup(); while (!(Is_usb_receive_out())); LSB0(line_coding.dwDTERate) = Usb_read_byte(); LSB1(line_coding.dwDTERate) = Usb_read_byte(); LSB2(line_coding.dwDTERate) = Usb_read_byte(); LSB3(line_coding.dwDTERate) = Usb_read_byte(); line_coding.bCharFormat = Usb_read_byte(); line_coding.bParityType = Usb_read_byte(); line_coding.bDataBits = Usb_read_byte(); Usb_ack_receive_out(); Usb_send_control_in(); // send a ZLP for STATUS phase while(!(Is_usb_read_control_enabled())); }
//! \brief Erases a block. //! //! The erase will be done only if the block is not bad //! //! \param page_addr absolute page address of the block //! \param force_erase true forces erasing, false erases the block (if not bad) //! //! \pre <code>nf_init()</code> should have been called before. //! The device which holds the block to delete should have been selected //! before with <code>nf_select( id )</code>. //! void nf_erase_block( U32 page_addr, U8 force_erase ) { if( false==force_erase ) { nf_open_page_read( page_addr, NF_SPARE_POS + G_OFST_BLK_STATUS ); if( (nf_rd_data()!=0xFF) ) return; // The block is bad. We can not erase it } nf_wait_busy(); nf_wr_cmd(NF_BLOCK_ERASE_CMD); // Auto Block Erase Setup nf_wr_addr( LSB0(page_addr) ); nf_wr_addr( LSB1(page_addr) ); if ( 3==G_N_ROW_CYCLES ) { nf_wr_addr( MSB1(page_addr) ); } nf_wr_cmd(NF_BLOCK_ERASE_CONFIRM_CMD); // Erase command }
//! cdc_get_line_coding. //! //! @brief This function manages reception of line coding parameters (baudrate...). //! void cdc_get_line_coding(void) { Usb_ack_receive_setup(); Usb_write_byte(LSB0(line_coding.dwDTERate)); Usb_write_byte(LSB1(line_coding.dwDTERate)); Usb_write_byte(LSB2(line_coding.dwDTERate)); Usb_write_byte(LSB3(line_coding.dwDTERate)); Usb_write_byte(line_coding.bCharFormat); Usb_write_byte(line_coding.bParityType); Usb_write_byte(line_coding.bDataBits); Usb_send_control_in(); while(!(Is_usb_read_control_enabled())); //Usb_clear_tx_complete(); while(!Is_usb_receive_out()); Usb_ack_receive_out(); }
void cdc_get_line_coding(void) { Usb_ack_setup_received_free(); Usb_reset_endpoint_fifo_access(EP_CONTROL); Usb_write_endpoint_data(EP_CONTROL, 8, LSB0(line_coding.dwDTERate)); Usb_write_endpoint_data(EP_CONTROL, 8, LSB1(line_coding.dwDTERate)); Usb_write_endpoint_data(EP_CONTROL, 8, LSB2(line_coding.dwDTERate)); Usb_write_endpoint_data(EP_CONTROL, 8, LSB3(line_coding.dwDTERate)); Usb_write_endpoint_data(EP_CONTROL, 8, line_coding.bCharFormat); Usb_write_endpoint_data(EP_CONTROL, 8, line_coding.bParityType); Usb_write_endpoint_data(EP_CONTROL, 8, line_coding.bDataBits ); Usb_ack_control_in_ready_send(); while (!Is_usb_control_in_ready()); while(!Is_usb_control_out_received()); Usb_ack_control_out_received_free(); }
void audio_speaker_set_sample_freq(void) { uint32_t sample_freq=0; Usb_ack_setup_received_free(); while(!Is_usb_control_out_received()) { TASKS_SCHEDULE(); } Usb_reset_endpoint_fifo_access(EP_CONTROL); LSB0(sample_freq)=Usb_read_endpoint_data(EP_CONTROL, 8); LSB1(sample_freq)=Usb_read_endpoint_data(EP_CONTROL, 8); LSB2(sample_freq)=Usb_read_endpoint_data(EP_CONTROL, 8); Usb_ack_control_out_received_free(); Usb_ack_control_in_ready_send(); // send a ZLP while (!Is_usb_control_in_ready()) { TASKS_SCHEDULE(); } #if (defined BOARD) && (BOARD==EVK1105) && (defined DEFAULT_DACS) && (DEFAULT_DACS==AUDIO_MIXER_DAC_AIC23B) // Disable microphone callback interrupt in order for the flush to not be blocked. // TODO: audio_mixer_dacs_flush_direct flushes Rx and Tw part of the DAC. // Should we separate them? Here, we want to flash the output only. device_audio_disable_microphone(); #endif audio_mixer_dacs_flush_direct(false); usb_stream_init( sample_freq , 2 , 16 , false ); #if (defined BOARD) && (BOARD==EVK1105) && (defined DEFAULT_DACS) && (DEFAULT_DACS==AUDIO_MIXER_DAC_AIC23B) // Enable microphone call back interrupts. device_audio_enable_microphone(); #endif }