Exemple #1
0
//# MENU spectrum
void spectrum_menu()
{
	lcdClear();
	lcdDisplay();
	getInputWaitRelease();

	// RF initialization from ppack.c:
	dac_init(false);
	cpu_clock_set(204); // WARP SPEED! :-)
	hackrf_clock_init();
	rf_path_pin_setup();
	/* Configure external clock in */
	scu_pinmux(SCU_PINMUX_GP_CLKIN, SCU_CLK_IN | SCU_CONF_FUNCTION1);
	sgpio_configure_pin_functions();
	ON(EN_VDD);
	ON(EN_1V8);
	OFF(MIC_AMP_DIS);
	delayms(500); // doesn't work without
	cpu_clock_set(204); // WARP SPEED! :-)
	si5351_init();
	portapack_init();

	while(1)
	{
		switch(getInput())
		{
			case BTN_UP:
				displayMode=MODE_WATERFALL;
				break;
			case BTN_DOWN:
				displayMode=MODE_SPECTRUM;
				break;
			case BTN_LEFT:
				freq -= 2000000;
				ssp1_set_mode_max2837();
				set_freq(freq);
				break;
			case BTN_RIGHT:
				freq += 2000000;
				ssp1_set_mode_max2837();
				set_freq(freq);
				break;
			case BTN_ENTER:
				//FIXME: unset the callback, reset the clockspeed, tidy up
                nvic_disable_irq(NVIC_DMA_IRQ);
                OFF(EN_VDD);
                OFF(EN_1V8);
                ON(MIC_AMP_DIS);
                systick_set_clocksource(0);
                systick_set_reload(12e6/SYSTICKSPEED/1000);
				return;

		}
	}
}
Exemple #2
0
//# MENU Apack
void ppack_menu() {
	lcdClear();
	lcdPrintln("PPack port");
	lcdPrintln("");
	lcdPrintln("up=enable");
	lcdDisplay();
	dac_init(false);

	cpu_clock_set(204); // WARP SPEED! :-)
	hackrf_clock_init();
	rf_path_pin_setup();
	/* Configure external clock in */
	scu_pinmux(SCU_PINMUX_GP_CLKIN, SCU_CLK_IN | SCU_CONF_FUNCTION1);

	sgpio_configure_pin_functions();

	ON(EN_VDD);
	ON(EN_1V8);
	OFF(MIC_AMP_DIS);
	complex_s8_t * samples;

	while(1){
		switch(getInputRaw()){
			case BTN_UP:
			    // ON(MIXER_EN); // hackrf does this
			    cpu_clock_set(204); // WARP SPEED! :-)
			    si5351_init();
			    portapack_init();
			    getInputWaitRelease();

			    break;
			case BTN_DOWN:
			    lcdPrintln("file");
			    writeFile("samples.8", (char*)0x20000000,(uintptr_t)s8ram-0x20000000);
			    break;
			case BTN_LEFT:
			    lcdPrintln("reset");
			    s8ram=(complex_s8_t*)0x20000000;
			    break;
			case BTN_RIGHT:
				break;
			case BTN_ENTER:
				return;
		};
		TOGGLE(LED2);
		delayms(40);
		lcdPrint(IntToStr((uintptr_t)s8ram,8,F_HEX));
		lcdPrint(" ");
		lcdPrintln(IntToStr(sctr,7,F_LONG));
		lcdDisplay();
	};
};
Exemple #3
0
void sgpio_test_interface() {
	const uint_fast8_t host_clock_sgpio_pin = 8; // Input
	const uint_fast8_t host_capture_sgpio_pin = 9; // Input
	const uint_fast8_t host_disable_sgpio_pin = 10; // Output
	const uint_fast8_t host_direction_sgpio_pin = 11; // Output

	SGPIO_GPIO_OENREG = 0; // All inputs for the moment.

	// Disable all counters during configuration
	SGPIO_CTRL_ENABLE = 0;

	sgpio_configure_pin_functions();

	// Make all SGPIO controlled by SGPIO's "GPIO" registers
	for (uint_fast8_t i = 0; i < 16; i++) {
		SGPIO_OUT_MUX_CFG(i) =
			  SGPIO_OUT_MUX_CFG_P_OE_CFG(0)
			| SGPIO_OUT_MUX_CFG_P_OUT_CFG(4);
	}

	// Set SGPIO output values.
	SGPIO_GPIO_OUTREG =
		  (1L << host_direction_sgpio_pin)
		| (1L << host_disable_sgpio_pin);

	// Enable SGPIO pin outputs.
	SGPIO_GPIO_OENREG =
		  (1L << host_direction_sgpio_pin)
		| (1L << host_disable_sgpio_pin)
		| (0L << host_capture_sgpio_pin)
		| (0L << host_clock_sgpio_pin)
		| (0xFF << 0);

	// Configure SGPIO slices.

	// Enable codec data stream.
	SGPIO_GPIO_OUTREG &= ~(1L << host_disable_sgpio_pin);

	while (1) {
		for (uint_fast8_t i = 0; i < 8; i++) {
			SGPIO_GPIO_OUTREG ^= (1L << i);
		}
	}
}
Exemple #4
0
void pin_setup(void) {
    /* GPIO pinmuxes */
	scu_pinmux(SCU_PINMUX_LED1, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_FILTER1, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_FILTER2, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_FILTER3, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_FILTER4, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_LO_LD, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_SOURCE_LD, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_SOURCE_LE, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_SOURCE_CE, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_LO_CE, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_LO_LE, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_RX_MIX_ENBL, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_LO_MUXOUT, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_SOURCE_MUXOUT, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_RX_V1, SCU_GPIO_NOPULL | SCU_CONF_FUNCTION4);
	scu_pinmux(SCU_PINMUX_RX_V2, SCU_GPIO_NOPULL| SCU_CONF_FUNCTION4);
	scu_pinmux(SCU_PINMUX_LO_RF_ENABLE, SCU_GPIO_NOPULL | SCU_CONF_FUNCTION4);
	scu_pinmux(SCU_PINMUX_SOURCE_RF_ENABLE, SCU_GPIO_NOPULL | SCU_CONF_FUNCTION4);
	scu_pinmux(SCU_PINMUX_TX_SW_CTRL, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_ATT_LE, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_PWDN, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_GP_CLKIN, SCU_CLK_IN | SCU_CONF_FUNCTION1);
	scu_pinmux(SCU_PINMUX_I2C_SDA, SCU_CONF_FUNCTION1);
	scu_pinmux(SCU_PINMUX_I2C_SCL, SCU_CONF_FUNCTION1);

	/* Configure all GPIO as Input (safe state) */
	GPIO0_DIR = 0;
	GPIO1_DIR = 0;
	GPIO2_DIR = 0;
	GPIO3_DIR = 0;
	GPIO4_DIR = 0;
	GPIO5_DIR = 0;
	GPIO6_DIR = 0;
	GPIO7_DIR = 0;

    ///* Set safe GPIO states */
    gpio_set(PORT_FILTER1, PIN_FILTER1);
    gpio_clear(PORT_FILTER2, PIN_FILTER2);
    gpio_clear(PORT_FILTER3, PIN_FILTER3);
    gpio_clear(PORT_FILTER4, PIN_FILTER4);
    gpio_set(PORT_SOURCE_LE, PIN_SOURCE_LE);
    gpio_clear(PORT_SOURCE_CE, PIN_SOURCE_CE);
    gpio_clear(PORT_LO_CE, PIN_LO_CE);
    gpio_set(PORT_LO_LE, PIN_LO_LE);
    gpio_clear(PORT_RX_MIX_ENBL, PIN_RX_MIX_ENBL);
    gpio_clear(PORT_RX_V1, PIN_RX_V1);
    gpio_clear(PORT_RX_V2, PIN_RX_V2);
    gpio_clear(PORT_LO_RF_ENABLE, PIN_LO_RF_ENABLE);
    gpio_clear(PORT_SOURCE_RF_ENABLE, PIN_SOURCE_RF_ENABLE);
    gpio_clear(PORT_TX_SW_CTRL, PIN_TX_SW_CTRL);
    gpio_clear(PORT_ATT_LE, PIN_ATT_LE);
    gpio_set(PORT_PWDN, PIN_PWDN);

    /* Set GPIO directions */
	GPIO0_DIR |= (PIN_LED1 | PIN_RX_MIX_ENBL);

    GPIO1_DIR |= (PIN_FILTER1 | PIN_FILTER2 | PIN_FILTER3 | PIN_FILTER4 | PIN_SOURCE_LE | PIN_SOURCE_CE | PIN_LO_CE | PIN_LO_LE | PIN_TX_SW_CTRL | PIN_ATT_LE | PIN_PWDN);

    GPIO5_DIR |= (PIN_RX_V1 | PIN_RX_V2 | PIN_LO_RF_ENABLE | PIN_SOURCE_RF_ENABLE);

    // Disable clock outputs
    scu_pinmux(CLK0, SCU_CLK_IN | SCU_CONF_FUNCTION7);
	scu_pinmux(CLK2, SCU_CLK_IN | SCU_CONF_FUNCTION7);

    //XXX: Debug
	//scu_pinmux(CLK2, SCU_CLK_IN | SCU_CONF_FUNCTION1);
    sgpio_configure_pin_functions();
}
Exemple #5
0
void sgpio_configure(
	const transceiver_mode_t transceiver_mode,
	const bool multi_slice
) {
	// Disable all counters during configuration
	SGPIO_CTRL_ENABLE = 0;

    sgpio_configure_pin_functions();

    // Set SGPIO output values.
	const uint_fast8_t cpld_direction =
		(transceiver_mode == TRANSCEIVER_MODE_TX) ? 1 : 0;
    SGPIO_GPIO_OUTREG =
          (cpld_direction << 11)
        | (1L << 10)	// disable
		;

	// Enable SGPIO pin outputs.
	const uint_fast16_t sgpio_gpio_data_direction =
		(transceiver_mode == TRANSCEIVER_MODE_TX)
		? (0xFF << 0)
		: (0x00 << 0);
	SGPIO_GPIO_OENREG =
		  (1L << 11)	// direction
	    | (1L << 10)	// disable
	    | (0L <<  9)	// capture
	    | (0L <<  8)	// clock
        | sgpio_gpio_data_direction
		;

	SGPIO_OUT_MUX_CFG( 8) =		// SGPIO: Input: clock
		  SGPIO_OUT_MUX_CFG_P_OE_CFG(0)
		| SGPIO_OUT_MUX_CFG_P_OUT_CFG(0)
		;
	SGPIO_OUT_MUX_CFG( 9) =		// SGPIO: Input: qualifier
		  SGPIO_OUT_MUX_CFG_P_OE_CFG(0)
		| SGPIO_OUT_MUX_CFG_P_OUT_CFG(0)
		;
    SGPIO_OUT_MUX_CFG(10) =		// GPIO: Output: disable
		  SGPIO_OUT_MUX_CFG_P_OE_CFG(0)
		| SGPIO_OUT_MUX_CFG_P_OUT_CFG(4)
		;
    SGPIO_OUT_MUX_CFG(11) =		// GPIO: Output: direction
		  SGPIO_OUT_MUX_CFG_P_OE_CFG(0)
		| SGPIO_OUT_MUX_CFG_P_OUT_CFG(4)
		;

	const uint_fast8_t output_multiplexing_mode =
		multi_slice ? 11 : 9;
	for(uint_fast8_t i=0; i<8; i++) {
		// SGPIO pin 0 outputs slice A bit "i".
		SGPIO_OUT_MUX_CFG(i) =
		      SGPIO_OUT_MUX_CFG_P_OE_CFG(0)
		    | SGPIO_OUT_MUX_CFG_P_OUT_CFG(output_multiplexing_mode)
			;
	}

	const uint_fast8_t slice_indices[] = {
		SGPIO_SLICE_A,
		SGPIO_SLICE_I,
		SGPIO_SLICE_E,
		SGPIO_SLICE_J,
		SGPIO_SLICE_C,
		SGPIO_SLICE_K,
		SGPIO_SLICE_F,
		SGPIO_SLICE_L,
	};
	
	const uint_fast8_t pos = multi_slice ? 0x1f : 0x03;
	const bool single_slice = !multi_slice;
	const uint_fast8_t slice_count = multi_slice ? 8 : 1;
	
	uint32_t slice_enable_mask = 0;
	for(uint_fast8_t i=0; i<slice_count; i++) {
		const uint_fast8_t slice_index = slice_indices[i];
		const bool input_slice = (i == 0) && (transceiver_mode == TRANSCEIVER_MODE_RX);
		const uint_fast8_t concat_order = (input_slice || single_slice) ? 0 : 3;
		const uint_fast8_t concat_enable = (input_slice || single_slice) ? 0 : 1;
		
		SGPIO_MUX_CFG(slice_index) =
		      SGPIO_MUX_CFG_CONCAT_ORDER(concat_order)
		    | SGPIO_MUX_CFG_CONCAT_ENABLE(concat_enable)
		    | SGPIO_MUX_CFG_QUALIFIER_SLICE_MODE(0)
		    | SGPIO_MUX_CFG_QUALIFIER_PIN_MODE(1)
		    | SGPIO_MUX_CFG_QUALIFIER_MODE(3)
		    | SGPIO_MUX_CFG_CLK_SOURCE_SLICE_MODE(0)
		    | SGPIO_MUX_CFG_CLK_SOURCE_PIN_MODE(0)
			| SGPIO_MUX_CFG_EXT_CLK_ENABLE(1)
			;

		SGPIO_SLICE_MUX_CFG(slice_index) =
		      SGPIO_SLICE_MUX_CFG_INV_QUALIFIER(0)
		    | SGPIO_SLICE_MUX_CFG_PARALLEL_MODE(3)
		    | SGPIO_SLICE_MUX_CFG_DATA_CAPTURE_MODE(0)
		    | SGPIO_SLICE_MUX_CFG_INV_OUT_CLK(0)
		    | SGPIO_SLICE_MUX_CFG_CLKGEN_MODE(1)
		    | SGPIO_SLICE_MUX_CFG_CLK_CAPTURE_MODE(1)
		    | SGPIO_SLICE_MUX_CFG_MATCH_MODE(0)
			;

		SGPIO_PRESET(slice_index) = 0;			// External clock, don't care
		SGPIO_COUNT(slice_index) = 0;				// External clock, don't care
		SGPIO_POS(slice_index) =
			  SGPIO_POS_POS_RESET(pos)
			| SGPIO_POS_POS(pos)
			;
		SGPIO_REG(slice_index) = 0x80808080;     // Primary output data register
		SGPIO_REG_SS(slice_index) = 0x80808080;  // Shadow output data register
		
		slice_enable_mask |= (1 << slice_index);
	}
	
	// Start SGPIO operation by enabling slice clocks.
	SGPIO_CTRL_ENABLE = slice_enable_mask;
}
Exemple #6
0
void pin_setup(void) {
	/* Release CPLD JTAG pins */
	scu_pinmux(SCU_PINMUX_CPLD_TDO, SCU_GPIO_NOPULL | SCU_CONF_FUNCTION4);
	scu_pinmux(SCU_PINMUX_CPLD_TCK, SCU_GPIO_NOPULL | SCU_CONF_FUNCTION0);
	scu_pinmux(SCU_PINMUX_CPLD_TMS, SCU_GPIO_NOPULL | SCU_CONF_FUNCTION0);
	scu_pinmux(SCU_PINMUX_CPLD_TDI, SCU_GPIO_NOPULL | SCU_CONF_FUNCTION0);
	
	gpio_input(&gpio_cpld_tdo);
	gpio_input(&gpio_cpld_tck);
	gpio_input(&gpio_cpld_tms);
	gpio_input(&gpio_cpld_tdi);
	
	/* Configure SCU Pin Mux as GPIO */
	scu_pinmux(SCU_PINMUX_LED1, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_LED2, SCU_GPIO_NOPULL);
	scu_pinmux(SCU_PINMUX_LED3, SCU_GPIO_NOPULL);
#ifdef RAD1O
	scu_pinmux(SCU_PINMUX_LED4, SCU_GPIO_NOPULL | SCU_CONF_FUNCTION4);
#endif

	scu_pinmux(SCU_PINMUX_EN1V8, SCU_GPIO_NOPULL);

	/* Configure USB indicators */
#ifdef JAWBREAKER
	scu_pinmux(SCU_PINMUX_USB_LED0, SCU_CONF_FUNCTION3);
	scu_pinmux(SCU_PINMUX_USB_LED1, SCU_CONF_FUNCTION3);
#endif

	/* Configure all GPIO as Input (safe state) */
	gpio_init();

	gpio_output(&gpio_led[0]);
	gpio_output(&gpio_led[1]);
	gpio_output(&gpio_led[2]);
#ifdef RAD1O
	gpio_output(&gpio_led[3]);
#endif

	gpio_output(&gpio_1v8_enable);

#ifdef HACKRF_ONE
	/* Configure RF power supply (VAA) switch control signal as output */
	gpio_output(&gpio_vaa_disable);

	/* Safe state: start with VAA turned off: */
	disable_rf_power();

	scu_pinmux(SCU_PINMUX_GPIO3_10, SCU_GPIO_PDN | SCU_CONF_FUNCTION0);
	scu_pinmux(SCU_PINMUX_GPIO3_11, SCU_GPIO_PDN | SCU_CONF_FUNCTION0);

#endif

#ifdef RAD1O
	/* Configure RF power supply (VAA) switch control signal as output */
	gpio_output(&gpio_vaa_enable);

	/* Safe state: start with VAA turned off: */
	disable_rf_power();

	scu_pinmux(SCU_PINMUX_GPIO3_10, SCU_GPIO_PDN | SCU_CONF_FUNCTION0);
	scu_pinmux(SCU_PINMUX_GPIO3_11, SCU_GPIO_PDN | SCU_CONF_FUNCTION0);

#endif

	/* enable input on SCL and SDA pins */
	SCU_SFSI2C0 = SCU_I2C0_NOMINAL;

	spi_bus_start(&spi_bus_ssp1, &ssp_config_max2837);

	mixer_bus_setup(&mixer);

	rf_path_pin_setup(&rf_path);
	
	/* Configure external clock in */
	scu_pinmux(SCU_PINMUX_GP_CLKIN, SCU_CLK_IN | SCU_CONF_FUNCTION1);

	sgpio_configure_pin_functions(&sgpio_config);
}