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