洪嵐峰 發表於 2023-4-20 04:12:59

ATSAM4SD32

ATSAM4SD32 是一款由微芯電子生產的 ARM Cortex-M4 內核微控制器。

它具有高性能、低功耗、豐富的外設和廣泛的應用領域,包括工業自動化、智能家居、醫療設備、汽車電子等。

ATSAM4SD32 內置了 2MB 的閃存、160KB 的 SRAM,以及豐富的外設,包括 SPI、I2C、UART、USB、Ethernet、CAN 等。

它還支持多種編程方式,包括 JTAG、SWD、ISP 等。

ATSAM4SD32 是一款十分優秀的微控制器,可以廣泛應用於各種嵌入式系統中。

C 語言程序示例,用於控制 ATSAMD32 中的 GPIO 引腳,以及使用定時器和 PWM 單元:


#include "sam.h"

#define LED_PIN PIN_PA15  // 定義 LED 引腳

void init_gpio(void)
{
    // 使能 PORTA 總線時鐘
    PMC->PMC_PCER0 = 1 << ID_PIOA;

    // 配置引腳為輸出模式
    PIOA->PIO_OER = LED_PIN;
    PIOA->PIO_PER = LED_PIN;
}

void init_tc(void)
{
    // 使能 TC0 總線時鐘
    PMC->PMC_PCER0 = 1 << ID_TC0;

    // 配置定時器 TC0,設置 PWM 模式,週期為 1000
    TC0->TC_CHANNEL.TC_CMR = TC_CMR_TCCLKS_TIMER_CLOCK1 | TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC;
    TC0->TC_CHANNEL.TC_RC = 1000;

    // 啟用 PWM0 輸出
    PIOA->PIO_ABSR |= PIO_PA0A_PWMH0;
    PIOA->PIO_PDR |= PIO_PA0A_PWMH0;

    // 啟用定時器 TC0
    TC0->TC_CHANNEL.TC_CCR = TC_CCR_SWTRG | TC_CCR_CLKEN;
}

int main(void)
{
    SystemInit();   // 系統初始化

    init_gpio();    // 初始化 GPIO
    init_tc();      // 初始化定時器和 PWM

    while(1)
    {
        // 設置 LED 引腳輸出高電平
        PIOA->PIO_SODR = LED_PIN;

        // 等待 500 毫秒
        TC0->TC_CHANNEL.TC_CCR = TC_CCR_SWTRG | TC_CCR_CLKEN | TC_CCR_SWTRG;
        while((TC0->TC_CHANNEL.TC_SR & TC_SR_CPCS) != TC_SR_CPCS);

        // 設置 LED 引腳輸出低電平
        PIOA->PIO_CODR = LED_PIN;

        // 等待 500 毫秒
        TC0->TC_CHANNEL.TC_CCR = TC_CCR_SWTRG | TC_CCR_CLKEN | TC_CCR_SWTRG;
        while((TC0->TC_CHANNEL.TC_SR & TC_SR_CPCS) != TC_SR_CPCS);
    }

    return 0;
}


這個程序初始化了一個 GPIO 引腳(LED 引腳)和一個定時器(TC0)。在主循環中,程序通過設置和清除 LED 引腳的輸出狀態來實現 LED 的閃爍效果。

同時,使用定時器控制 LED 閃爍的時間間隔,達到 PWM 的效果。
頁: [1]
查看完整版本: ATSAM4SD32