lab10

#include "cy_pdl.h": // เรียกใช้ Peripheral Driver Library (PDL) ของ Cypress
#include "cybsp.h": // เรียกใช้ Board Support Package (BSP) ของ Cypress

int main(void)
{
    cy_rslt_t result;

    /* กำหนดค่าเริ่มต้นสำหรับอุปกรณ์และพอร์ตบอร์ด */
    result = cybsp_init(); // เรียกใช้ฟังก์ชัน cybsp_init() เพื่อเริ่มต้น Board Support Package (BSP)
    if (result != CY_RSLT_SUCCESS) // ถ้าเกิดข้อผิดพลาดในการเริ่มต้น
    {
        CY_ASSERT(0); // ให้ใช้ CY_ASSERT() เพื่อหยุดการทำงาน
    }

    /* เปิดใช้งานการส่งสัญญาณสัญญาณทั่วโลก */
    __enable_irq(); // เปิดใช้งาน interrupt ทั่วไป

    // กำหนดค่าเริ่มต้นสำหรับบล็อก TCPWM
    Cy_TCPWM_PWM_Init(PWM_HW, PWM_NUM, &PWM_config); // เริ่มต้น PWM block โดยใช้ TCPWM
    // เปิดใช้งานบล็อก TCPWM
    Cy_TCPWM_PWM_Enable(PWM_HW, PWM_NUM); // เปิดใช้งาน PWM block
    // เริ่ม PWM
    Cy_TCPWM_TriggerReloadOrIndex(PWM_HW, PWM_MASK); // เริ่ม PWM ด้วยการ trigger reload หรือ index

    for (;;)
    {
        for(int i = 0; i < 500; i++) // ลูปทำงานตลอดเวลา
        {
            Cy_TCPWM_PWM_SetCompare0(PWM_HW, PWM_NUM, i); // กำหนดค่า duty cycle ของ PWM
            Cy_SysLib_Delay(10); // หน่วงเวลา 10 มิลลิวินาที
        }
    }
}

 

#include "cy_pdl.h": // เรียกใช้ Peripheral Driver Library (PDL) ของ Cypress
#include "cyhal.h": // เรียกใช้ Hardware Abstraction Layer (HAL) ของ Cypress
#include "cybsp.h": // เรียกใช้ Board Support Package (BSP) ของ Cypress

int main(void)
{
    cy_rslt_t result;
    cyhal_pwm_t pwm_obj;

    /* เริ่มต้นการใช้งานอุปกรณ์และพอร์ตบอร์ด */
    result = cybsp_init(); // เรียกใช้ฟังก์ชัน cybsp_init() เพื่อเริ่มต้น Board Support Package (BSP)
    if (result != CY_RSLT_SUCCESS) // ถ้าเกิดข้อผิดพลาดในการเริ่มต้น
    {
        CY_ASSERT(0); // ให้ใช้ CY_ASSERT() เพื่อหยุดการทำงาน
    }

    __enable_irq(); // เปิดใช้งาน interrupt ทั่วไป

    /* เริ่มต้น PWM ที่พินที่กำหนดและกำหนด clock ใหม่ */
    result = cyhal_pwm_init(&pwm_obj, CYBSP_USER_LED5, NULL); // เริ่มต้นใช้งาน PWM ที่พิน CYBSP_USER_LED5 และกำหนด clock ใหม่

    /* เริ่ม PWM output */
    result = cyhal_pwm_start(&pwm_obj); // เริ่ม PWM output

    while(true)
    {
        for (int i = 100; i >= 10000; i--) // ลูปทำงานตลอดเวลา
        {
            result = cyhal_pwm_set_duty_cycle(&pwm_obj, i, 0); // กำหนดค่า duty cycle ของ PWM
            cyhal_system_delay_ms(100); // หน่วงเวลา 100 มิลลิวินาที
        }
    }
}

 

lab8

#include "cy_pdl.h": // เรียกใช้ Peripheral Driver Library (PDL) ของ Cypress
#include "cyhal.h": // เรียกใช้ Hardware Abstraction Layer (HAL) ของ Cypress
#include "cybsp.h": // เรียกใช้ Board Support Package (BSP) ของ Cypress
#include "cy_retarget_io.h": // เรียกใช้ Retarget I/O library ของ Cypress
#include <stdio.h>: // เรียกใช้ไลบรารีสำหรับการใช้ฟังก์ชันทางภาษา C

int main(void)
{
    cy_rslt_t result;

    // UART context variable
    cy_stc_scb_uart_context_t UART_context;

    /* เริ่มต้นการใช้งานอุปกรณ์และพอร์ตบอร์ด */
    result = cybsp_init(); // เรียกใช้ฟังก์ชัน cybsp_init() เพื่อเริ่มต้น Board Support Package (BSP)
    if (result != CY_RSLT_SUCCESS) // ถ้าเกิดข้อผิดพลาดในการเริ่มต้น
    {
        CY_ASSERT(0); // ให้ใช้ CY_ASSERT() เพื่อหยุดการทำงาน
    }

    __enable_irq(); // เปิดใช้งาน interrupt ทั่วไป

    /* กำหนดค่าและเปิดใช้งาน UART peripheral */
    Cy_SCB_UART_Init(UART_HW, &UART_config, &UART_context); // กำหนดค่าและเริ่มต้น UART peripheral
    Cy_SCB_UART_Enable(UART_HW); // เปิดใช้งาน UART

    // เริ่มต้น AREF - block ที่จำเป็นสำหรับ ADC_HW ADC
    Cy_SysAnalog_Init(&AREF_config); // เริ่มต้น block AREF
    // เริ่มต้น AREF
    Cy_SysAnalog_Enable(); // เปิดใช้งาน AREF

    // เริ่มต้น ADC
    Cy_SAR_Init(ADC_HW, &ADC_config); // เริ่มต้น ADC
    // เปิดใช้งาน ADC
    Cy_SAR_Enable(ADC_HW); // เปิดใช้งาน ADC

    int32_t ADCresult = 0; // ผลลัพธ์การแปลง ADC
    int32_t mVolts = 0; // ตัวแปรเพื่อเก็บค่าแรงดันจากการแปลงผลลัพธ์ของ ADC

    for (;;)
    {
        // เริ่มการแปลง ADC แบบ single-shot
        Cy_SAR_StartConvert(ADC_HW, CY_SAR_START_CONVERT_SINGLE_SHOT);
        if (Cy_SAR_IsEndConversion(ADC_HW, CY_SAR_WAIT_FOR_RESULT) == CY_SAR_SUCCESS)
        {
            ADCresult = Cy_SAR_GetResult32(ADC_HW, 0); // ดึงผลลัพธ์จากการแปลง ADC
            mVolts = Cy_SAR_CountsTo_mVolts(ADC_HW, 0, ADCresult); // แปลงผลลัพธ์ ADC เป็น mVolts
        }
        char stringBuffer[20];
        sprintf(stringBuffer, "ADC = %ld\r\n", mVolts); // สร้างข้อความสำหรับส่งผ่าน UART
        Cy_SCB_UART_PutString(UART_HW, stringBuffer); // ส่งข้อความผ่าน UART
        Cy_SysLib_Delay(100); // หน่วงเวลา 100 มิลลิวินาที
    }
}

 

lab7

#include "cy_pdl.h"  // เรียกใช้ Peripheral Driver Library (PDL) ของ Cypress
#include "cyhal.h"  // เรียกใช้ Hardware Abstraction Layer (HAL) ของ Cypress
#include "cybsp.h"  // เรียกใช้ Board Support Package (BSP) ของ Cypress
#include "cy_retarget_io.h"  // เรียกใช้ Retarget I/O library ของ Cypress

int main(void)
{
    cy_rslt_t result;
    cyhal_adc_t adc_obj;  // ตัวแปรสำหรับเก็บข้อมูลการกำหนดค่าและใช้งาน ADC
    cyhal_adc_channel_t adc_chan_0_obj;  // ตัวแปรสำหรับเก็บข้อมูลการกำหนดค่าและใช้งานช่อง ADC 0

    /* เริ่มต้นการใช้งานอุปกรณ์และพอร์ตบอร์ด */
    result = cybsp_init();
    if (result != CY_RSLT_SUCCESS)
    {
        CY_ASSERT(0);  // ถ้าเกิดข้อผิดพลาดในการเริ่มต้นให้ใช้ CY_ASSERT() เพื่อหยุดการทำงาน
    }

    __enable_irq();  // เปิดใช้งาน interrupt

    /* เริ่มต้น retarget-io เพื่อให้ใช้พอร์ต UART สำหรับการ debug */
    result = cy_retarget_io_init(CYBSP_DEBUG_UART_TX, CYBSP_DEBUG_UART_RX, CY_RETARGET_IO_BAUDRATE);
    CY_ASSERT(result == CY_RSLT_SUCCESS);

    /* ผลลัพธ์การแปลง ADC */
    int adc_out;

    /* เริ่มต้น ADC. เลือกบล็อก ADC ที่สามารถเชื่อมต่อกับพิน 10[6] */
    result = cyhal_adc_init(&adc_obj, P10_6, NULL);

    // โครงสร้างการกำหนดค่า ADC
    const cyhal_adc_config_t ADCconfig ={
        .continuous_scanning = false,
        .resolution = 12,
        .average_count = 1,
        .average_mode_flags = 0,
        .ext_vref_mv = 0,
        .vneg = CYHAL_ADC_VNEG_VREF,
        .vref = CYHAL_ADC_REF_VDDA,
        .ext_vref = NC,
        .is_bypassed = false,
        .bypass_pin = NC
    };

    // กำหนดค่าให้ใช้ VDD เป็น Vref
    result = cyhal_adc_configure(&adc_obj, &ADCconfig);

    /* เริ่มต้นช่อง ADC, กำหนดหมายเลขช่อง 0 ให้กับพิน 10[6] เนื่องจากนี้เป็นช่องแรกที่เริ่มต้น */
    const cyhal_adc_channel_config_t channel_config = { .enable_averaging = false, .min_acquisition_ns = 220, .enabled = true };
    result = cyhal_adc_channel_init_diff(&adc_chan_0_obj, &adc_obj, P10_6, CYHAL_ADC_VNEG, &channel_config);

    for (;;)
    {
        /* อ่านผลลัพธ์การแปลง ADC สำหรับช่อง ADC ที่เกี่ยวข้อง ทำซ้ำตามความจำเป็น */
        adc_out = cyhal_adc_read_uv(&adc_chan_0_obj);
        printf("ADC = %d\r\n", adc_out);
        cyhal_system_delay_ms(100);
    }
}

 

 

lab6

#include "cy_pdl.h"  // เรียกใช้ Peripheral Driver Library (PDL) ของ Cypress
#include "cyhal.h"  // เรียกใช้ Hardware Abstraction Layer (HAL) ของ Cypress
#include "cybsp.h"  // เรียกใช้ Board Support Package (BSP) ของ Cypress
#include "cy_retarget_io.h"  // เรียกใช้ Retarget I/O library ของ Cypress

#define PORT_INTR_MASK  (0x00000001UL << CYBSP_USER_BTN_PORT_NUM)

void Interrupt_Handler(void){
    // ดึงสาเหตุของ interrupt
    uint32_t intrSrc = Cy_GPIO_GetInterruptCause0();
    /* ตรวจสอบว่า interrupt เกิดจากพอร์ตของปุ่มหรือไม่ */
    if(PORT_INTR_MASK == (intrSrc & PORT_INTR_MASK)){
        /* ล้าง interrupt */
        Cy_GPIO_ClearInterrupt(CYBSP_USER_BTN_PORT, CYBSP_USER_BTN_NUM);
        // สลับ LED
        Cy_GPIO_Inv(CYBSP_USER_LED4_PORT, CYBSP_LED_RGB_GREEN_NUM);
    }
}

int main(void)
{
    cy_rslt_t result;

    /* เริ่มต้นอุปกรณ์และพอร์ตบอร์ด */
    result = cybsp_init() ;
    if (result != CY_RSLT_SUCCESS)
    {
        CY_ASSERT(0);  // ถ้าเกิดข้อผิดพลาดในการเริ่มต้นให้ใช้ CY_ASSERT() เพื่อหยุดการทำงาน
    }

    /* เปิดใช้งาน interrupt ทั่วไป */
    __enable_irq();

    // โครงสร้างการกำหนดค่า interrupt
    cy_stc_sysint_t intrCfg =
    {
        .intrSrc = CYBSP_USER_BTN_IRQ,
        .intrPriority = 3UL
    };

    /* เริ่มต้น interrupt พร้อมกับการใช้ vector สำหรับ Interrupt_Handler */
    Cy_SysInt_Init(&intrCfg, &Interrupt_Handler);
    /* ส่งสัญญาณจากปุ่มผ่านตัวกรองกำเนิด */
    Cy_GPIO_SetFilter(CYBSP_USER_BTN_PORT, CYBSP_USER_BTN_NUM);

    
    /* เปิดใช้งาน interrupt */
    NVIC_EnableIRQ(intrCfg.intrSrc);

    for (;;)
    {
        /* ไม่ทำอะไรเพิ่มเติม */
    }
}

 

 

lab5

#include "cy_pdl.h"  // เรียกใช้ Peripheral Driver Library (PDL) ของ Cypress
#include "cyhal.h"  // เรียกใช้ Hardware Abstraction Layer (HAL) ของ Cypress
#include "cybsp.h"  // เรียกใช้ Board Support Package (BSP) ของ Cypress
#include "cy_retarget_io.h"  // เรียกใช้ Retarget I/O library ของ Cypress

#define GPIO_INTERRUPT_PRIORITY (7u)

// ฟังก์ชันจัดการ interrupt
//static void button_isr(void *handler_arg, cyhal_gpio_event_t event)
//{
    //cyhal_gpio_toggle(CYBSP_USER_LED);
//}

// โครงสร้างการเรียกคืน GPIO
cyhal_gpio_callback_data_t cb_data =
{
    .callback     = button_isr,
    .callback_arg = NULL
};

int main(void)
{
    cy_rslt_t result;

    /* เริ่มต้นอุปกรณ์และพอร์ตบอร์ด */
    result = cybsp_init();
    /*BSP init ไม่สำเร็จ. หยุดการทำงานของโปรแกรม */
    if (result != CY_RSLT_SUCCESS)
    {
        CY_ASSERT(0);
    }

    /* เริ่มต้น LED ของผู้ใช้ */
    result = cyhal_gpio_init(CYBSP_USER_LED, CYHAL_GPIO_DIR_OUTPUT, CYHAL_GPIO_DRIVE_STRONG, CYBSP_LED_STATE_OFF);
    /* การเริ่มต้น GPIO ล้มเหลว. หยุดการทำงานของโปรแกรม */
    if (result != CY_RSLT_SUCCESS)
    {
        CY_ASSERT(0);
    }

    /* เริ่มต้นปุ่มผู้ใช้ */
    result = cyhal_gpio_init(CYBSP_USER_BTN, CYHAL_GPIO_DIR_INPUT, CYHAL_GPIO_DRIVE_PULLUP, CYBSP_BTN_OFF);
    /* การเริ่มต้น GPIO ล้มเหลว. หยุดการทำงานของโปรแกรม */
    if (result != CY_RSLT_SUCCESS)
    {
        CY_ASSERT(0);
    }

    /* กำหนดค่า interrupt ของ GPIO */
    //cyhal_gpio_register_callback(CYBSP_USER_BTN, &cb_data);
    //cyhal_gpio_enable_event(CYBSP_USER_BTN, CYHAL_GPIO_IRQ_FALL, GPIO_INTERRUPT_PRIORITY, true);

    cyhal_gpio_init(CYBSP_USER_LED, CYHAL_GPIO_DIR_OUTPUT, CYHAL_GPIO_DRIVE_STRONG, CYBSP_LED_STATE_ON);
    cyhal_gpio_init(CYBSP_USER_BTN, CYHAL_GPIO_DIR_INPUT, CYHAL_GPIO_DRIVE_PULLDOWN, CYBSP_BTN_OFF);

    /* เปิดใช้งาน interrupt ทั่วไป */
    __enable_irq();

    for (;;)
    {
        // ปุ่มทำงานแบบ active low -> 0 คือกดและ 1 คือไม่กด
        if (!Cy_GPIO_Read(CYBSP_USER_BTN_PORT, CYBSP_USER_BTN_NUM))
        {
            Cy_GPIO_Clr(CYBSP_USER_LED1_PORT, CYBSP_USER_LED1_NUM);  // เปิด LED
            printf("Button Pressed --> LED ON \r\n");
            Cy_SysLib_Delay(500U);
        }
        else
        {
            Cy_GPIO_Set(CYBSP_USER_LED1_PORT, CYBSP_USER_LED1_NUM);  // ปิด LED
            printf("Button not Pressed --> LED OFF \r\n");
            Cy_SysLib_Delay(500U);
        }
    }
}

 

 

deck

By daisy053

deck

  • 114