Esempio n. 1
0
static void
i2c_init(wm_i2c *i2c)
{
	static int clock_inited = 0;
	
	if (!clock_inited) {
		CLK_Module_Type clkmod;
		switch (i2c->port) {
		case 0:
		default:
			clkmod = CLK_I2C0;
			break;
		case 1:
			clkmod = CLK_I2C1;
			break;
		case 2:
			clkmod = CLK_I2C2;
			break;
		}
		CLK_ModuleClkEnable(clkmod);
		CLK_ModuleClkDivider(clkmod, CLK_DIV);
		clock_inited = true;
	}
	i2c_config(i2c);
}
Esempio n. 2
0
uint32_t ssp_drv_set_clk(SSP_ID_Type ssp_id, uint32_t freq)
{
	mdev_t *mdev_p;
	sspdev_data_t *ssp_data_p;
	uint16_t divider;

	if (!IS_SSP_PERIPH(ssp_id) || freq <= 0)
		return -WM_FAIL;
	/* Check ssp_id is initialized */
	mdev_p = mdev_get_handle(mdev_ssp_name[ssp_id]);
	if (!mdev_p) {
		SSP_LOG("Unable to open device %s\r\n",
			mdev_ssp_name[ssp_id]);
		return -WM_FAIL;
	}
	ssp_data_p = (sspdev_data_t *) mdev_p->private_data;
	/* Calculate Divider */
	divider = (uint32_t)(board_cpu_freq()/freq);
	ssp_data_p->freq = (uint32_t)((board_cpu_freq() / divider));

	if (!IS_SSP_DIVIDER(divider)) {
		SSP_LOG("Unable to set %u frequency for %s %d\r\n",
			freq, mdev_ssp_name[ssp_id], divider);
		ssp_data_p->freq = 0;
		return -WM_FAIL;
	}
	switch (ssp_id) {
	case SSP0_ID:
		CLK_ModuleClkEnable(CLK_SSP0);
		CLK_SSPClkSrc(CLK_SSP_ID_0, CLK_SYSTEM);
		CLK_ModuleClkDivider(CLK_SSP0, divider);
		break;
	case SSP1_ID:
		CLK_ModuleClkEnable(CLK_SSP1);
		CLK_SSPClkSrc(CLK_SSP_ID_1, CLK_SYSTEM);
		CLK_ModuleClkDivider(CLK_SSP1, divider);
		break;
	case SSP2_ID:
		CLK_ModuleClkEnable(CLK_SSP2);
		CLK_SSPClkSrc(CLK_SSP_ID_2, CLK_SYSTEM);
		CLK_ModuleClkDivider(CLK_SSP2, divider);
		break;
	}
	return ssp_data_p->freq;
}
Esempio n. 3
0
void
xs_wdt_start(xsMachine *the)
{
    int index = xsToInteger(xsArg(0));
    WDT_Config_Type cfg;

    cfg.timeoutVal = index;
    cfg.mode = WDT_MODE_RESET;
    cfg.resetPulseLen = WDT_RESET_PULSE_LEN_2;
    WDT_Init(&cfg);

    CLK_ModuleClkEnable(CLK_WDT);
#if defined(CONFIG_CPU_MW300)
    /* For 88MW300, APB1 bus runs at 50MHz whereas for 88MC200 it runs at
     * 25MHz, hence following clk divider is added to keep timeout same.
     */
    CLK_ModuleClkDivider(CLK_WDT, 1);
#endif
    WDT_Enable();
    wdt_enable = 1;
}