# PSoC™ 6S2 GPIO-PDL LED Blink Lab

## GPIO-PDL LED Blink Lab

### *Lab Objective:*

The purpose of this lab is to offer students a hands-on understanding of GPIO (General Purpose Input Output) implementation using the PSoC 6 microcontroller from Cypress (CY8CKIT-062S2-43012 Infineon Board). Upon completing this lab, students will be proficient in initializing GPIOs, controlling GPIO states, and developing basic delay functions.

### *Lab Description:*

This lab instructs students to program a PSoC 6 microcontroller to manage an LED through a GPIO, employing the GPIO-PDL (Peripheral Driver Library). The task will demonstrate the core functionality of GPIO output.

### *The code will:*

* Initialize the device and necessary board peripherals.
* Set up a GPIO pin (connected to the LED) as an output utilizing GPIO-PDL functions.
* Establish an endless loop that will:
  * Drive the pin low
  * Wait 250 ms
  * Drive the pin high
  * Wait 250 ms This sequence will lead to the LED blinking on and off every half-second (250ms on, 250ms off), showcasing an elementary control of GPIO output through GPIO-PDL.
    * *Note:* [*See the PDL API documentation for the GPIO functions to drive the pin high and low.*](https://infineon.github.io/mtb-hal-cat1/html/group__group__hal__gpio.html#nested-classes)
    * *Note: Use the `Cy_SysLib_Delay` function for the delay.*

## 🔥 Requirements

<table><thead><tr><th width="429">Resources</th><th>Links</th></tr></thead><tbody><tr><td>Computer</td><td>💻</td></tr><tr><td>ModusToolbox™ software v3.0 or later</td><td><a href="https://www.infineon.com/modustoolbox">Link</a></td></tr><tr><td>CY8CKIT-062S2-43012 Infineon Board</td><td><a href="https://github.com/Advance-Innovation-Centre-AIC/BIIL_MTB-100_Hello_World_and_LED_Blinking_Programming_Template/assets/88732241/0215501d-b774-4045-8e64-ef49e28d8404">Link</a></td></tr><tr><td>Technical Report</td><td><a href="https://www.dropbox.com/scl/fi/amaxc94pte0ut2i1r5ewx/Technical-Report-Lab00.paper?rlkey=b3xm3vrerz9xgv1glb30cvy9z&#x26;dl=0">dropbox</a></td></tr></tbody></table>

## 🚩 Let start

### Create Application

* 👉 Open Eclipse IDE ModusToolbox<br>

<figure><img src="https://github.com/Advance-Innovation-Centre-AIC/BIIL_MTB-100_Hello_World_and_LED_Blinking_Programming_Template/assets/88732241/276b5ee3-7752-488c-baa7-3b55f6615b27" alt=""><figcaption></figcaption></figure>

* 👉 Select Board

![image](https://github.com/Advance-Innovation-Centre-AIC/BIIL_MTB-100_Hello_World_and_LED_Blinking_Programming_Template/assets/88732241/df637b74-1bee-4c0c-9bdc-4b70d7f0cee8)

* 👉 Select Application<br>

  <figure><img src="https://github.com/Advance-Innovation-Centre-AIC/BIIL_MTB-102_GPIO-PDL_LED_Blink_Template/assets/88732241/662a9e38-6f1b-4558-b8b7-49ed8cc1d42b" alt=""><figcaption></figcaption></figure>

### Device Configuration  for initializing LED and UART pin

#### Open Device Configuration to initialize LED Pin

<figure><img src="/files/VzZJypJgTpdOHvgCpuUw" alt="" width="563"><figcaption></figcaption></figure>

* Find Pin and search for `led` then select the `P1[5]`<br>

  <figure><img src="https://github.com/Advance-Innovation-Centre-AIC/BIIL_MTB-102_GPIO-PDL_LED_Blink_Template/assets/88732241/5f516394-f05e-43e3-b0f7-2eb7daf2d8a6" alt=""><figcaption></figcaption></figure>
* Set the pins `Drive Mode` parameter to [`Strong Drive Input buffer off`](/biil_psoc6/basic-mcu-interfacing/psoc-tm-6s2-peripherals-interfacing-gpio/gpio-principles.md#strong).<br>

  <figure><img src="https://github.com/Advance-Innovation-Centre-AIC/BIIL_MTB-102_GPIO-PDL_LED_Blink_Template/assets/88732241/a3fe848a-4396-4788-8ead-0afce0b0ddbd" alt=""><figcaption></figcaption></figure>

#### &#x20;Initialize debug UART

<figure><img src="/files/EZxDWUvcfoeLWUlf107F" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/2Sl0YQkc7URHfVI00usC" alt=""><figcaption></figcaption></figure>

### Coding

* Coding: Open the main.c file and add the following code to the main() function.

```
for (;;)
  {
        /* Drive the USER LED pin high (LED off) */
      	Cy_GPIO_Set(CYBSP_USER_LED_PORT, CYBSP_USER_LED_NUM);
      
        /* Wait 250 ms */
    	Cy_SysLib_Delay(250U);
    
        /* Drive the USER LED pin low (LED on) */
    	Cy_GPIO_Clr(CYBSP_USER_LED_PORT, CYBSP_USER_LED_NUM);
    
        /* Wait 250 ms */
	Cy_SysLib_Delay(250U);
  }
```

* `for (;;)` This line starts an infinite loop. The code contained within the curly braces {} will repeat indefinitely.
* `Cy_GPIO_Set(CYBSP_USER_LED_PORT, CYBSP_USER_LED_NUM);`sets the GPIO pin specified by CYBSP\_USER\_LED\_PORT and CYBSP\_USER\_LED\_NUM to a high state, turning off the LED.&#x20;
* `Cy_SysLib_Delay(250U);` introduces a delay of 250 milliseconds, causing a pause in the execution of the program. This delay is implemented using a system library function.
* `Cy_GPIO_Clr(CYBSP_USER_LED_PORT, CYBSP_USER_LED_NUM);` clears (sets to a low state) the GPIO pin specified by CYBSP\_USER\_LED\_PORT and CYBSP\_USER\_LED\_NUM, turning On the LED.&#x20;
* Another `Cy_SysLib_Delay(250U);` introduces another delay of 250 milliseconds.

*This sequence of code turns on the LED, waits for 250 milliseconds, turns off the LED, and then waits for another 250 milliseconds. The cycle then repeats, creating a blinking effect for the LED.*

### Build the Application

* 👉 Build the Application

<figure><img src="/files/d3YNRkwCAKqYcwecdmsj" alt=""><figcaption></figcaption></figure>

### Launching the Application

* 👉 Launching the Application
  * Before launching the program to the board, make sure that you have already connected the board to the computer through a USB cable.<br>

    <figure><img src="https://github.com/Advance-Innovation-Centre-AIC/BIIL_MTB-100_Hello_World_and_LED_Blinking_Programming_Template/assets/88732241/7a6bb6ef-cb63-4613-98a1-42f9617ad724" alt="" width="188"><figcaption></figcaption></figure>
  * Launching Program<br>

    <figure><img src="https://github.com/Advance-Innovation-Centre-AIC/BIIL_MTB-102_GPIO-PDL_LED_Blink_Template/assets/88732241/efee18cb-0e32-4d4e-93d1-6dd0ee609140" alt=""><figcaption></figcaption></figure>
* 👉 Check the Result&#x20;

  <figure><img src="https://github.com/Advance-Innovation-Centre-AIC/BIIL_MTB-102_GPIO-PDL_LED_Blink_Template/assets/88732241/7d1bbd14-4157-4f9c-823d-e8f147dfea2e" alt="" width="375"><figcaption></figcaption></figure>

> #### 🎉 <mark style="color:blue;">Congratulations! You can now complete Lab102</mark>

## Supported toolchains (make variable 'TOOLCHAIN')

* GNU Arm® embedded compiler v10.3.1 (`GCC_ARM`) - Default value of `TOOLCHAIN`
* Arm® compiler v6.16 (`ARM`)
* IAR C/C++ compiler v9.30.1 (`IAR`)

## Supported kits (make variable 'TARGET')

* [PSoC™ 62S2 Wi-Fi Bluetooth® pioneer kit](https://www.infineon.com/CY8CKIT-062S2-43012) (`CY8CKIT-062S2-43012`)
* [PSoC™ 62S1 Wi-Fi Bluetooth® pioneer kit](https://www.infineon.com/CYW9P62S1-43438EVB-01) (`CYW9P62S1-43438EVB-01`)
* [PSoC™ 62S1 Wi-Fi Bluetooth® pioneer kit](https://www.infineon.com/CYW9P62S1-43012EVB-01) (`CYW9P62S1-43012EVB-01`)
* [PSoC™ 62S3 Wi-Fi Bluetooth® prototyping kit](https://www.infineon.com/CY8CPROTO-062S3-4343W) (`CY8CPROTO-062S3-4343W`)

## Related resources

| Resources                       | Links                                                                                                                                                      |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ModusToolbox™ Software Training | [link](https://www.dropbox.com/sh/waj898o4o8eccx0/AAB3hBBaIQo2OvJ5-fubGJIha/training-modustoolbox-level1-getting-started-master/Manual/Ch2-Tools.pdf?dl=0) |

## Other resources

Infineon provides a wealth of data at [www.infineon.com](http://www.infineon.com) to help you select the right device, and quickly and effectively integrate it into your design.

## Document history

Document title: *BILL\_MTB-102* – *GPIO-PDL LED Blink Template*

<table><thead><tr><th width="149">Version</th><th>Description of change</th></tr></thead><tbody><tr><td>1.0.0</td><td>Lab 102: Learn basic GPIO control with PSoC 6 using GPIO PDL and implement an LED blinker.</td></tr></tbody></table>

## Authors:

* *Assoc. Prof. Wiroon Sriborrirux*
* *Mr. Sriengchhun Chheang*
* *Mr. Sabol Socare*<br>

<br>

***

© BDH Corporation, 2022-2023


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.aic-eec.com/biil_psoc6/basic-mcu-interfacing/psoc-tm-6s2-peripherals-interfacing-gpio/psoc-tm-6s2-gpio-pdl-led-blink-lab.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
