CombinedDemo
Source code can be downloaded from source:/Examples/CombinedDemo
Description
This examples show allows to test main functions (GPIOs, clock, USB, Ethernet, flash) of LPC4350-DB1 demoboard.
Configure clocks
1 SystemInit();
2
3 // External flash note:
4 // This demo can be larger than 16k (bootloader initializes only A[13..0])
5 // So initialize memory before clock setup
6 MemoryPinInit();
7 EMCFlashInit();
8
9 CGU_Init();
10
11 CGU_SetPLL0();
12 CGU_EnableEntity(CGU_CLKSRC_PLL0, ENABLE);
13 CGU_EntityConnect(CGU_CLKSRC_PLL0, CGU_BASE_USB0);
14
15 CGU_EnableEntity(CGU_CLKSRC_ENET_RX_CLK, ENABLE);
16 CGU_EnableEntity(CGU_CLKSRC_ENET_TX_CLK, ENABLE);
17 CGU_EntityConnect(CGU_CLKSRC_ENET_TX_CLK, CGU_BASE_PHY_TX);
18 CGU_EntityConnect(CGU_CLKSRC_ENET_RX_CLK, CGU_BASE_PHY_RX);
Configure buttons
1 scu_pinmux(S1_SCU_PORT, S1_SCU_PIN, MD_BUK | MD_EZI, FUNC4);
2 scu_pinmux(S2_SCU_PORT, S2_SCU_PIN, MD_BUK | MD_EZI, FUNC4);
3 scu_pinmux(S3_SCU_PORT, S3_SCU_PIN, MD_BUK | MD_EZI, FUNC4);
4 scu_pinmux(S4_SCU_PORT, S4_SCU_PIN, MD_BUK | MD_EZI, FUNC4);
5 GPIO_SetDir(S1_GPIO_PORT, S1_GPIO_MASK, 0);
6 GPIO_SetDir(S2_GPIO_PORT, S2_GPIO_MASK, 0);
7 GPIO_SetDir(S3_GPIO_PORT, S3_GPIO_MASK, 0);
8 GPIO_SetDir(S4_GPIO_PORT, S4_GPIO_MASK, 0);
Configure LEDs
1 scu_pinmux(D2_SCU_PORT, D2_SCU_PIN, MD_BUK, FUNC0);
2 scu_pinmux(D3_SCU_PORT, D3_SCU_PIN, MD_BUK, FUNC4);
3 scu_pinmux(D4_SCU_PORT, D4_SCU_PIN, MD_BUK, FUNC4);
4 scu_pinmux(D5_SCU_PORT, D5_SCU_PIN, MD_BUK, FUNC4);
5 scu_pinmux(D6_SCU_PORT, D6_SCU_PIN, MD_BUK, FUNC4);
6 GPIO_SetDir(D2_GPIO_PORT, D2_GPIO_MASK, 1);
7 GPIO_SetDir(D3_GPIO_PORT, D3_GPIO_MASK, 1);
8 GPIO_SetDir(D4_GPIO_PORT, D4_GPIO_MASK, 1);
9 GPIO_SetDir(D5_GPIO_PORT, D5_GPIO_MASK, 1);
10 GPIO_SetDir(D6_GPIO_PORT, D6_GPIO_MASK, 1);
11 GPIO_ClearValue(D2_GPIO_PORT, D2_GPIO_MASK);
12 GPIO_ClearValue(D3_GPIO_PORT, D3_GPIO_MASK);
13 GPIO_ClearValue(D4_GPIO_PORT, D4_GPIO_MASK);
14 GPIO_ClearValue(D5_GPIO_PORT, D5_GPIO_MASK);
15 GPIO_ClearValue(D6_GPIO_PORT, D6_GPIO_MASK);
Initialize callback structures
1 memset((void*)&usb_param, 0, sizeof(USBD_API_INIT_PARAM_T));
2
3 usb_param.usb_reg_base = LPC_USB0_BASE;
4 usb_param.max_num_ep = 6;
5
6 usb_param.mem_base = 0x20004000;
7 usb_param.mem_size = 0x2000;
8 usb_param.USB_Configure_Event = USB_Configure_Event;
For eagle/raptor the local SRAM is not accesable to USB so copy the descriptors to USB accessable memory
1 copy_descriptors(&desc, usb_param.mem_base + usb_param.mem_size);
Turn on the phy
1 LPC_CREG->CREG0 &= ~(1<<5);
Initialize USB
1 ret = USBD_API->hw->Init(&hUsb, &desc, &usb_param);
2 if (ret == LPC_OK)
3 {
4 pIntfDesc = (USB_INTERFACE_DESCRIPTOR*)((uint32_t)desc.high_speed_desc + USB_CONFIGUARTION_DESC_SIZE);
5 ret = usb_hid_init(hUsb, pIntfDesc, &usb_param.mem_base, &usb_param.mem_size);
6 if (ret == LPC_OK)
7 {
8 NVIC_EnableIRQ(USB0_IRQn); // enable interrupt
9 USBD_API->hw->Connect(hUsb, 1); // connect
10 }
11 else
12 {
13 GPIO_SetValue(D4_GPIO_PORT, D4_GPIO_MASK); // for testing
14 while (1); // catch error
15 }
16 }
17 else
18 {
19 GPIO_SetValue(D3_GPIO_PORT, D3_GPIO_MASK); // for testing
20 while (1); // catch error
21 }
Generate interrupt every 10 ms
1 SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE) / 100);
Configure Ethernet
1 GPIO_SetValue(D6_GPIO_PORT, D6_GPIO_MASK); // for testing
2 TCPLowLevelInit();
3 // clear HTTP-server's flag register
4 HTTPStatus = 0;
5 // set port we want to listen to
6 TCPLocalPort = TCP_PORT_HTTP;
Testing
1 GPIO_ClearValue(D6_GPIO_PORT, D6_GPIO_MASK);
2 blinkOn = 1;
3
4 while (1)
5 {
6 uint8_t b = 0, x = 0, y = 0;
7
8 if ((GPIO_ReadValue(S1_GPIO_PORT) & S1_GPIO_MASK) == 0) x = 1;
9 if ((GPIO_ReadValue(S2_GPIO_PORT) & S2_GPIO_MASK) == 0) x = (uint8_t)-1;
10 if ((GPIO_ReadValue(S3_GPIO_PORT) & S3_GPIO_MASK) == 0) y = 1;
11 if ((GPIO_ReadValue(S4_GPIO_PORT) & S4_GPIO_MASK) == 0) y = (uint8_t)-1;
12
13 HID_MouseReport[0] = b; // buttons
14 HID_MouseReport[1] = x; // x
15 HID_MouseReport[2] = y; // y
16
17 // listen for incoming TCP-connection
18 if (!(SocketStatus & SOCK_ACTIVE)) TCPPassiveOpen();
19 // handle network and easyWEB-stack
20 DoNetworkStuff();
21 // events
22 HTTPServer();
23 }