# 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="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FLGskC0ILDn2rbPYgwELR%2Fimage.png?alt=media&#x26;token=31119b58-7bb7-44e0-bbca-4bf26e5ef0a4" 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`](https://docs.aic-eec.com/biil_psoc6/basic-mcu-interfacing/gpio-principles#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="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FKXuJBlKv5CZROeLUtHZo%2Fimage.png?alt=media&#x26;token=ba600819-d6e5-415d-b607-1e47ec86e225" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FYcdoqRF9Rcgh8LlwNaaI%2Fimage.png?alt=media&#x26;token=1848ecc6-349a-42fc-a374-09728319deea" 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="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2F0TCwy84dDt6cGObqiH02%2Fimage.png?alt=media&#x26;token=5a100140-156a-41c5-a248-0f809557c5de" 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
