コード例 #1
0
ファイル: main.c プロジェクト: yohanes-erwin/stm32f4-gcc
int main(void)
{
	// Set clock to 168MHz
	CLOCK_SetClockTo168MHz();
	// Delay initialization
	DELAY_Init();

	// Enable clock for GPIOD
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
	// Initialize PD13 and PD15 as output for orange and blue LED
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOD, &GPIO_InitStruct);

	// External interrupt initialization
	EXTI0_Init();

	while (1)
	{
		// Toggle blue LED (PD15) every 5s
		GPIO_ToggleBits(GPIOD, GPIO_Pin_15);
		DELAY_Ms(5000);
	}
}
コード例 #2
0
ファイル: mac.c プロジェクト: TemcoChelsea/CM5
/*
* -----------------------------------------------------------------------------
 * Function Name: MAC_SystemSleep
 * Purpose:
 * Params:
 * Returns:
 * Note:
 * ----------------------------------------------------------------------------
 */
void MAC_SystemSleep(void)
{
	U8_T XDATA	temp;

	/* disable mac receive */
	mac_ReadReg(MAC_MEDIUM_STATUS_MODE_REG, &temp, 1);
	temp &= 0xfb;
	mac_WriteReg(MAC_MEDIUM_STATUS_MODE_REG, &temp, 1);

	DELAY_Ms(500);
	PCON = SWB_;
	PCON |= STOP_;

	DELAY_Ms(500);

	/* enable mac receive */
	mac_ReadReg(MAC_MEDIUM_STATUS_MODE_REG, &temp, 1);
	temp |= 4;
	mac_WriteReg(MAC_MEDIUM_STATUS_MODE_REG, &temp, 1);

} /* End of MAC_SystemSleep() */
コード例 #3
0
ファイル: mac.c プロジェクト: TemcoChelsea/CM5
/*
 * ----------------------------------------------------------------------------
 * Function Name: MAC_LinkSpeedChk
 * Purpose:
 * Params: none
 * Returns:	100: Ethernet is link to 100M
 *			10 : Ethernet is link to 10M
 *			0  : not link
 * Note:
 * ----------------------------------------------------------------------------
 */
U8_T MAC_LinkSpeedChk(void)
{
	mac_ReadReg(MAC_WAKEUP_LINK_INT_STATUS_REG, &mac_InterruptStatus, 1);
	if (mac_InterruptStatus & STATUS_PRIMARY_IS_LINK_UP)
	{
		if (PBDP->MacInfo.LinkSpeed == 0)
		{
			if (PBDP->MacInfo.NetworkType != MAC_FORCE_ENBEDDED_PHY_10_HALF)
			{
				mac_GetMediaType();
			}
			else
			{
				PBDP->MacInfo.FullDuplex = 0;
				PBDP->MacInfo.LinkSpeed = 10;

				PBDP->MacInfo.MediumLinkType = MEDIUM_ENABLE_RECEIVE;
				mac_WriteReg(MAC_MEDIUM_STATUS_MODE_REG, &PBDP->MacInfo.MediumLinkType, 1);
			}

			/* start operation */
			mac_StartOperate();
			DELAY_Ms(0x30);
		}
	}
	else
	{
		if (PBDP->MacInfo.LinkSpeed)
		{
			PBDP->MacInfo.LinkSpeed = 0;

			/* disable receive */
			PBDP->MacInfo.MediumLinkType &= ~MEDIUM_ENABLE_RECEIVE;
			mac_WriteReg(MAC_MEDIUM_STATUS_MODE_REG, &PBDP->MacInfo.MediumLinkType, 1);

			STOE_WaitHwReleaseRcvBuf();

			/* stop operation and reset Ethernet MAC packet buffer */
			mac_StopOperate();

			if (PBDP->MacInfo.NetworkType != MAC_FORCE_ENBEDDED_PHY_10_HALF)
			{
				PHY_WatchDog();
			}
		}
	}

	return PBDP->MacInfo.LinkSpeed;

} /* End of MAC_LinkSpeedChk */
コード例 #4
0
ファイル: mac.c プロジェクト: TemcoChelsea/CM5
/*
 * ----------------------------------------------------------------------------
 * Function Name: MAC_Init
 * Purpose: initial all registers and variables of MAC.
 * Params: network_type -0: auto- negotiation
 *						-1: fixed 100 full speed.
 *						-2: fixed 100 half speed.
 *						-3: fixed 10 full speed.
 *						-4: fixed 10 half speed.
 * Returns:
 * Note:
 * ----------------------------------------------------------------------------
 */
void MAC_Init(U8_T network_type)
{
	U8_T XDATA	temp[3];

	/* read MAC address*/
	mac_ReadReg(MAC_ADDR_REG, PNetStation->CurrStaAddr, MAC_ADDRESS_LEN);

	/* use embedded phy */
	temp[0] = (PHY_SELECT_EMBEDDED | PHY_INTERNAL_PHY_OPERA_STATE | BIT1);
	mac_WriteReg(MAC_PHY_CTL_REG, temp, 1);

	/* phy power up */
	PHY_PowerUp();

	/* reset embedded phy */
	temp[0] = (PHY_SELECT_EMBEDDED | BIT1);
	mac_WriteReg(MAC_PHY_CTL_REG, temp, 1);

	DELAY_Ms(2);

	/* set embedded phy to operating mode */
	temp[0] = (PHY_SELECT_EMBEDDED | PHY_INTERNAL_PHY_OPERA_STATE | BIT1);
	mac_WriteReg(MAC_PHY_CTL_REG, temp, 1);

	/* stop & reset MAC operation */
	mac_StopOperate();

	if (network_type != FORCE_EMBEDDED_PHY_10_HALF)
	{
		/* phy initialize. */
		PHY_Init(network_type);
	}

	PBDP->MacInfo.MediumLinkType = MEDIUM_ENABLE_TX_FLOWCTRL;
	PBDP->MacInfo.FullDuplex = 1;
	switch (network_type)
	{
	default:
	case AUTO_NEGOTIATION:
		PBDP->MacInfo.NetworkType = MAC_AUTO_NEGOTIATION;
		PBDP->MacInfo.MediumLinkType|=(MEDIUM_FULL_DUPLEX_MODE | MEDIUM_MII_100M_MODE |
			MEDIUM_ENABLE_RX_FLOWCTRL);
		break;
	case FIXED_100_FULL:
		PBDP->MacInfo.NetworkType = (MAC_LINK_100M_SPEED | MAC_LINK_FULL_DUPLEX);
		PBDP->MacInfo.MediumLinkType|=(MEDIUM_FULL_DUPLEX_MODE | MEDIUM_MII_100M_MODE |
			MEDIUM_ENABLE_RX_FLOWCTRL);
		break;
	case FIXED_100_HALF:
		PBDP->MacInfo.NetworkType = MAC_LINK_100M_SPEED;
		PBDP->MacInfo.MediumLinkType |= MEDIUM_MII_100M_MODE;
		break;
	case FIXED_10_FULL:
		PBDP->MacInfo.NetworkType = (MAC_LINK_10M_SPEED | MAC_LINK_FULL_DUPLEX);
		PBDP->MacInfo.MediumLinkType |= (MEDIUM_FULL_DUPLEX_MODE |
			MEDIUM_ENABLE_RX_FLOWCTRL);
		break;
	case FIXED_10_HALF:
		PBDP->MacInfo.NetworkType = MAC_LINK_10M_SPEED;
		break;
	case FORCE_EMBEDDED_PHY_10_HALF:
		PBDP->MacInfo.NetworkType = MAC_FORCE_ENBEDDED_PHY_10_HALF;
		PBDP->MacInfo.MediumLinkType = 0;
		break;
	}
	/* set medium status */
	mac_WriteReg(MAC_MEDIUM_STATUS_MODE_REG, &PBDP->MacInfo.MediumLinkType, 1);

	/* set IPG */
	temp[0] = 0x2b;
	temp[1] = 0x16;
	temp[2] = 0x95;
	mac_WriteReg(MAC_IPG_CTL_REG, temp, 3);

	/* set RX filter. */
	temp[0] = BIT6;
	mac_WriteReg(MAC_RX_CTL_REG, temp, 1);
	MAC_SetRxFilter(MAC_RCV_BROADCAST);

	PBDP->MacInfo.LinkSpeed = 0; // Ethernet not linkup.

	/* decide interrupt mask */
#if (MAC_GET_INTSTATUS_MODE == MAC_INTERRUPT_MODE) 
	PBDP->MacInfo.InterruptMask = PRIMARY_LINK_CHANGE_ENABLE;
#endif

} /* End of MAC_Init() */