/******************************************************************** * 名 称:InitPIO() * 功 能:初始化LED_PIO为输出,KEY为输入,开中断,清边沿捕获寄存器 * 入口参数:无 * 出口参数:无 ********************************************************************/ void InitPIO(void) { /* 初始化LED_PIO为输出,KEY为输入 */ IOWR_ALTERA_AVALON_PIO_DIRECTION(LED_PIO_BASE, LEDCON); IOWR_ALTERA_AVALON_PIO_DIRECTION(KEY_PIO_BASE, 0x00); /* 开KEY的中断 */ IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_PIO_BASE, KEYCON); /* 清边沿捕获寄存器 */ IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE, 0x00); /* 注册中断服务子程序 */ alt_irq_register(KEY_PIO_IRQ, NULL, KeyDown_interrupts); }
void trigger_reset() { /* Drive a 0 out to the configuration PLD reconfig_request pin. */ IOWR_ALTERA_AVALON_PIO_DATA( RECONFIG_REQUEST_PIO_BASE, 0x0 ); /* Set BIDIR PIO to drive out. */ IOWR_ALTERA_AVALON_PIO_DIRECTION( RECONFIG_REQUEST_PIO_BASE, 1 ); usleep ( 1000000 ); /* Drive out a 1....probably won't reach this point!!! */ IOWR_ALTERA_AVALON_PIO_DATA( RECONFIG_REQUEST_PIO_BASE, 0x1 ); }
/* SDA _________-------- SCL ____------------- */ void stopSCCB(void) { IOWR_ALTERA_AVALON_PIO_DIRECTION(SDA_BASE, OUT); SIO_D_CLR; usleep(DELAY_TIME); SIO_C_SET; usleep(DELAY_TIME); SIO_D_SET; usleep(DELAY_TIME); }
int main() { int input = 'A'; int i; while (input != 'E') { alt_putstr("\n"); alt_putstr("\nTo READ type 'R' and press enter.\n"); alt_putstr("\nTo WRITE type 'W' and press enter.\n"); alt_putstr("\nTo exit the program, enter 'E'\n"); input = alt_getchar(); if (input == 'R') { *enable = 0x0; *readWrite = 0x1; // read for (i = 0; i < 128; i++) { IOWR_ALTERA_AVALON_PIO_DIRECTION(*data, 0xFF); (*address) = i; *leds = *data; alt_printf("%x \n", *data); usleep(1000); } input = 'A'; alt_printf("Read complete\n"); } else if (input == 'W') { *enable = 0x0; *readWrite = 0x0; // write IOWR_ALTERA_AVALON_PIO_DIRECTION(*data, 0x00000000); for (i = 0; i < 128; i++) { *address = i; *data = 0x00000000; *data = 127 - i; alt_printf("%x\n", *data); } input = 'A'; } } return 0; }
void startSCCB(void) { IOWR_ALTERA_AVALON_PIO_DIRECTION(SDA_BASE, OUT); SIO_D_SET; //数据线高电平 usleep(DELAY_TIME); SIO_C_SET; //在时钟线高的时候数据线由高至低 usleep(DELAY_TIME); SIO_D_CLR; usleep(DELAY_TIME); SIO_C_CLR; //数据线恢复低电平,单操作函数必要 usleep(DELAY_TIME); }
/* SDA ____zzzzzzzzzzzzz SCL ____------_______ */ void noAck(void) { IOWR_ALTERA_AVALON_PIO_DIRECTION(SDA_BASE, IN); SIO_D_SET; usleep(DELAY_TIME); SIO_C_SET; usleep(DELAY_TIME); SIO_C_CLR; usleep(DELAY_TIME); SIO_D_CLR; usleep(DELAY_TIME); }
int main() { IOWR(SEVENSEG0_BASE, 0, 0); I2C_init(I2C0_BASE, ALT_CPU_CPU_FREQ, 400000); // Initialize Audio CODEC write_wm(0xF, 0); // reset write_wm(2, 0x79 << 0); // L volume +6db write_wm(3, 0x79 << 0); // R volume +6db write_wm(4, (1 << 1) | (1 << 4)); // mic mute, DAC select write_wm(5, 0); // no DAC mute write_wm(6, 0); // power up write_wm(7, 2 | (1 << 6) | (0 << 2) | (2 << 0)); // I2S, 16 bit, Master write_wm(8, 1 | (1 << 1) | (8 << 2) | (1 << 0)); // usb mode, 272fs, 44.1 Khz write_wm(9, 1); // activate // build waveform template (two periods of sine wave) int fs = 12000000/272; // 44.1k int t = 0; int f = 1000; int w = 2*31415*f / 10000; int A = 16000; int offset = 0; IOWR(AUDIO0_BASE, 4, 0); // CMD_ADDR - fifo_clear for(t=0; t<MAX_SAMPLES; t++) { // t en periodos de sampling // t * 1/fs es tiempo int y = (int)(A*sinf(w*t/(float)fs)) + offset; wave[t] = y; } // Fill SDRAM size_t block = 7*1024*1024; uint8_t* ptr = (uint8_t*)malloc(block); // 7MB for(t=0; t<block; t+=4) { uint32_t* p = (uint32_t*)(ptr + t); *p = (uint32_t)(wave[t/4] << 16) | wave[t/4]; } IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO0_BASE, ALTERA_AVALON_PIO_DIRECTION_INPUT); t = 0; while(true) { if((IORD(PIO0_BASE, 0) & 0x1) == 0) { IOWR(SEVENSEG0_BASE, 0, 1); if( IORD(AUDIO0_BASE,5) & 0x1 ) continue; // STATUS_ADDR if(t >= MAX_SAMPLES) t = 0; int y = wave[t++]; IOWR(AUDIO0_BASE, 0, y); // DAC_LFIFO_ADDR IOWR(AUDIO0_BASE, 1, y); // DAC_RFIFO_ADDR } else { IOWR(SEVENSEG0_BASE, 0, 2); } } return 0; }
void vParTestInitialise( void ) { IOWR_ALTERA_AVALON_PIO_DIRECTION( LED_PIO_BASE, ALTERA_AVALON_PIO_DIRECTION_OUTPUT ); ulLedStates = 0; }
/***************************************************************************** * * * Function : Initilise_Keypad * * Author : Queron Williams * * Date : 02/03/2014 * * Inputs : N/A * * Outputs : N/A * * Description : Sets up the keypad ready for use by enabling PORTA to * * be used as an input * * * ******************************************************************************/ void Initilise_Keypad() { /* set portA to be used as an input */ IOWR_ALTERA_AVALON_PIO_DIRECTION(PORT_A_BASE, ALTERA_AVALON_PIO_DIRECTION_INPUT); }