void sound_init() { // Initialise the hardware. We make use of the SSC module. sound_interrupt_disable(); sound_disable(); *AT91C_PMC_PCER = (1 << AT91C_ID_SSC); *AT91C_PIOA_ODR = AT91C_PA17_TD; *AT91C_PIOA_OWDR = AT91C_PA17_TD; *AT91C_PIOA_MDDR = AT91C_PA17_TD; *AT91C_PIOA_PPUDR = AT91C_PA17_TD; *AT91C_PIOA_IFDR = AT91C_PA17_TD; *AT91C_PIOA_CODR = AT91C_PA17_TD; *AT91C_PIOA_IDR = AT91C_PA17_TD; *AT91C_SSC_CR = AT91C_SSC_SWRST; *AT91C_SSC_TCMR = AT91C_SSC_CKS_DIV + AT91C_SSC_CKO_CONTINOUS + AT91C_SSC_START_CONTINOUS; *AT91C_SSC_TFMR = 31 + (7 << 8) + AT91C_SSC_MSBF; // 8 32-bit words *AT91C_SSC_CR = AT91C_SSC_TXEN; aic_mask_on(AT91C_ID_SSC); aic_clear(AT91C_ID_SSC); aic_set_vector(AT91C_ID_SSC, AT91C_AIC_PRIOR_LOWEST | AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED, (U32)sound_isr_entry); /*PG*/ sample.buf_id = 0; sample.cur_vol = -1; sample.sample_buf = NULL; }
void bt_init(void) { U8 trash; U32 trash2; in_buf_in_ptr = out_buf_ptr = 0; in_buf_idx = 0; *AT91C_PMC_PCER = (1 << AT91C_PERIPHERAL_ID_US1); *AT91C_PIOA_PDR = BT_RX_PIN | BT_TX_PIN | BT_SCK_PIN | BT_RTS_PIN | BT_CTS_PIN; *AT91C_PIOA_ASR = BT_RX_PIN | BT_TX_PIN | BT_SCK_PIN | BT_RTS_PIN | BT_CTS_PIN; *AT91C_US1_CR = AT91C_US_RSTSTA; *AT91C_US1_CR = AT91C_US_STTTO; *AT91C_US1_RTOR = 10000; *AT91C_US1_IDR = AT91C_US_TIMEOUT; *AT91C_US1_MR = (AT91C_US_USMODE_HWHSH & ~AT91C_US_SYNC) | AT91C_US_CLKS_CLOCK | AT91C_US_CHRL_8_BITS | AT91C_US_PAR_NONE | AT91C_US_NBSTOP_1_BIT | AT91C_US_OVER; *AT91C_US1_BRGR = ((CLOCK_RATE/8/BAUD_RATE) | (((CLOCK_RATE/8) - ((CLOCK_RATE/8/BAUD_RATE) * BAUD_RATE)) / ((BAUD_RATE + 4)/8)) << 16); *AT91C_US1_PTCR = (AT91C_PDC_RXTDIS | AT91C_PDC_TXTDIS); *AT91C_US1_RCR = 0; *AT91C_US1_TCR = 0; *AT91C_US1_RNPR = 0; *AT91C_US1_TNPR = 0; aic_mask_off(AT91C_PERIPHERAL_ID_US1); aic_clear(AT91C_PERIPHERAL_ID_US1); trash = *AT91C_US1_RHR; trash = *AT91C_US1_CSR; *AT91C_US1_RPR = (unsigned int)&(in_buf[0][0]); *AT91C_US1_RCR = 128; *AT91C_US1_RNPR = (unsigned int)&(in_buf[1][0]); *AT91C_US1_RNCR = 128; *AT91C_US1_CR = AT91C_US_RXEN | AT91C_US_TXEN; *AT91C_US1_PTCR = (AT91C_PDC_RXTEN | AT91C_PDC_TXTEN); *AT91C_PIOA_PDR = BT_RX_PIN | BT_TX_PIN | BT_SCK_PIN | BT_RTS_PIN | BT_CTS_PIN; *AT91C_PIOA_ASR = BT_RX_PIN | BT_TX_PIN | BT_SCK_PIN | BT_RTS_PIN | BT_CTS_PIN; *AT91C_PIOA_PER = BT_CS_PIN | BT_RST_PIN; *AT91C_PIOA_OER = BT_CS_PIN | BT_RST_PIN; *AT91C_PIOA_SODR = BT_CS_PIN | BT_RST_PIN; *AT91C_PIOA_PPUDR = BT_ARM7_CMD_PIN; *AT91C_PIOA_PER = BT_ARM7_CMD_PIN; *AT91C_PIOA_CODR = BT_ARM7_CMD_PIN; *AT91C_PIOA_OER = BT_ARM7_CMD_PIN; // Configure timer 01 as trigger for ADC, sample every 0.5ms *AT91C_PMC_PCER = (1 << AT91C_PERIPHERAL_ID_TC1); *AT91C_TC1_CCR = AT91C_TC_CLKDIS; *AT91C_TC1_IDR = ~0; trash2 = *AT91C_TC1_SR; *AT91C_TC1_CMR = AT91C_TC_WAVE | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_ACPA_SET | AT91C_TC_ACPC_CLEAR | AT91C_TC_ASWTRG_SET; /* MCLK/2, wave mode 10 */ *AT91C_TC1_RC = (CLOCK_FREQUENCY/2)/(2000); *AT91C_TC1_RA = (CLOCK_FREQUENCY/2)/(4000); *AT91C_TC1_CCR = AT91C_TC_CLKEN; *AT91C_TC1_CCR = AT91C_TC_SWTRG; *AT91C_PMC_PCER = (1 << AT91C_PERIPHERAL_ID_ADC); *AT91C_ADC_MR = 0; *AT91C_ADC_MR |= AT91C_ADC_TRGEN_EN | AT91C_ADC_TRGSEL_TIOA1; *AT91C_ADC_MR |= 0x00003F00; *AT91C_ADC_MR |= 0x00020000; *AT91C_ADC_MR |= 0x09000000; *AT91C_ADC_CHER = AT91C_ADC_CH6 | AT91C_ADC_CH4; buf_ptr = &(in_buf[0][0]); }