找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

[M051] M0518 BPWM1_CH5 無法開啟

[复制链接]
跳转到指定楼层
楼主
monkey8088 发表于 2016-11-22 11:01:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
麻煩大家指點一下,這個pwm該如何開啟目前已經開啟其餘23組pwm正常工作中
唯獨這個腳開不了

PB15可以使用GPIO功能正常, SYS_ALT_MFP3_PB15_BPWM1_CH5設定上去就變成高電位輸出
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
a_ziliu 发表于 2017-3-6 09:45:32 | 只看该作者
SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB15_Msk);
SYS->GPB_MFP |= (SYS_GPB_MFP_PB15_BPWM1_CH5);
SYS->ALT_MFP2 |=SYS_ALT_MFP2_PB15_BPWM1_CH5;
回复 支持 反对

使用道具 举报

板凳
 楼主| monkey8088 发表于 2017-3-30 14:58:30 | 只看该作者
感謝你的回應,設定後也是一樣是高電位~~
其餘23組都可以正常工作,唯獨此腳
回复 支持 反对

使用道具 举报

地板
a_ziliu 发表于 2017-4-5 08:39:40 | 只看该作者

控制所有PWM輸出的代碼
/**************************************************************************//**
* @file     main.c
* @version  V1.00
* $Revision: 2 $
* $Date: 14/12/25 10:24a $
* @brief    Change duty cycle and period of output waveform by BPWM Double Buffer function.
* @note
* Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved.
*
******************************************************************************/
#include <stdio.h>
#include "M0518.h"

/*---------------------------------------------------------------------------------------------------------*/
/* Macro, type and constant definitions                                                                    */
/*---------------------------------------------------------------------------------------------------------*/

#define PLLCON_SETTING      CLK_PLLCON_50MHz_HXT
#define PLL_CLOCK           50000000


/*---------------------------------------------------------------------------------------------------------*/
/* Global variables                                                                                        */
/*---------------------------------------------------------------------------------------------------------*/

/**
* @brief       BPWM0 IRQ Handler
*
* @param       None
*
* @return      None
*
* @details     ISR to handle BPWM0 interrupt event
*/
void BPWM0_IRQHandler(void)
{
    static int toggle = 0;

    // Update BPWM0 channel 0 period and duty
    if(toggle == 0)
    {
        BPWM_SET_CNR(BPWM0, 0, 99);
        BPWM_SET_CMR(BPWM0, 0, 39);
    }
    else
    {
        BPWM_SET_CNR(BPWM0, 0, 399);
        BPWM_SET_CMR(BPWM0, 0, 199);
    }
    toggle ^= 1;
    // Clear channel 0 period interrupt flag
    BPWM_ClearPeriodIntFlag(BPWM0, 0);
}

void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock                                                                                       */
    /*---------------------------------------------------------------------------------------------------------*/

    /* Enable Internal RC clock */
    CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);

    /* Waiting for IRC22M clock ready */
    CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);

    /* Switch HCLK clock source to Internal RC and HCLK source divide 1 */
    CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC, CLK_CLKDIV_HCLK(1));

    /* Enable external 12MHz XTAL, internal 22.1184MHz */
    CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk | CLK_PWRCON_OSC22M_EN_Msk);

    /* Enable PLL and Set PLL frequency */
    CLK_SetCoreClock(PLL_CLOCK);

    /* Waiting for clock ready */
    CLK_WaitClockReady(CLK_CLKSTATUS_PLL_STB_Msk | CLK_CLKSTATUS_XTL12M_STB_Msk | CLK_CLKSTATUS_OSC22M_STB_Msk);

    /* Switch HCLK clock source to PLL, STCLK to HCLK/2 */
    CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_PLL, CLK_CLKDIV_HCLK(2));

    /* Enable UART module clock */
    CLK_EnableModuleClock(UART0_MODULE);

    /* Select UART module clock source */
    CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));

    /* Enable BPWM0 clock source */
    CLK_EnableModuleClock(PWM0_MODULE);
    CLK_EnableModuleClock(PWM1_MODULE);
                CLK_EnableModuleClock(BPWM0_MODULE);
    CLK_EnableModuleClock(BPWM1_MODULE);

    /* Select BPWM module clock source */
          CLK_SetModuleClock(PWM0_MODULE, CLK_CLKSEL3_PWM0_S_PLL, 0);
                CLK_SetModuleClock(PWM1_MODULE, CLK_CLKSEL3_PWM1_S_PLL, 0);       
                CLK_SetModuleClock(BPWM0_MODULE, CLK_CLKSEL3_BPWM0_S_PLL, 0);
                CLK_SetModuleClock(BPWM1_MODULE, CLK_CLKSEL3_BPWM1_S_PLL, 0);       

    /* Reset BPWM0 */
    SYS_ResetModule(PWM0_RST);
                SYS_ResetModule(PWM1_RST);
                SYS_ResetModule(BPWM0_RST);
                SYS_ResetModule(BPWM1_RST);

    /* Update System Core Clock */
    /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
    //SystemCoreClockUpdate();
    PllClock        = PLL_CLOCK;            // PLL
    SystemCoreClock = PLL_CLOCK / 1;        // HCLK
    CyclesPerUs     = PLL_CLOCK / 1000000;  // For SYS_SysTickDelay()

    /*---------------------------------------------------------------------------------------------------------*/
    /* Init I/O Multi-function                                                                                 */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Set GPB multi-function pins for UART0 RXD and TXD */
    SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk);
    SYS->GPB_MFP |= (SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD);
                #if  1
    /* Set GPA.12/13/14/15/0/1 multi-function pins for PWM0 Channel 0 ~ channel 5 */
    SYS->GPA_MFP &= ~(SYS_GPA_MFP_PA12_Msk | SYS_GPA_MFP_PA13_Msk | SYS_GPA_MFP_PA14_Msk | SYS_GPA_MFP_PA15_Msk);
    SYS->GPA_MFP |= (SYS_GPA_MFP_PA12_PWM0_CH0 | SYS_GPA_MFP_PA13_PWM0_CH1 | SYS_GPA_MFP_PA14_PWM0_CH2 | SYS_GPA_MFP_PA15_PWM0_CH3);
    //SYS->ALT_MFP3 &= ~(SYS_ALT_MFP3_PA0_Msk | SYS_ALT_MFP3_PA1_Msk);
                SYS->ALT_MFP4 &= ~(SYS_ALT_MFP4_PA12_Msk | SYS_ALT_MFP4_PA13_Msk );
                                /* Set GPA.2/3 multi-function pins for PWM1 Channel 0 ~ channel 1 */
    SYS->GPA_MFP &= ~(SYS_GPA_MFP_PA2_Msk | SYS_GPA_MFP_PA3_Msk);
                SYS->GPA_MFP |= (SYS_GPA_MFP_PA2_PWM1_CH0 | SYS_GPA_MFP_PA3_PWM1_CH1);
                SYS->ALT_MFP3        &= ~(SYS_ALT_MFP3_PA2_Msk | SYS_ALT_MFP3_PA3_Msk);
                SYS->ALT_MFP3        |= (SYS_ALT_MFP3_PA2_PWM1_CH0 | SYS_ALT_MFP3_PA3_PWM1_CH1);
                SYS->ALT_MFP4 &= ~(SYS_ALT_MFP4_PA2_Msk | SYS_ALT_MFP4_PA3_Msk);
               
                /* Set GPA.11 multi-function pins for PWM1 Channel 3 */
                SYS->GPA_MFP &= ~(SYS_GPA_MFP_PA11_Msk|SYS_GPA_MFP_PA10_Msk);
                SYS->GPA_MFP |= SYS_GPA_MFP_PA11_PWM1_CH3|SYS_GPA_MFP_PA10_PWM1_CH2;
                SYS->ALT_MFP3        &= ~SYS_ALT_MFP3_PA11_Msk|SYS_ALT_MFP3_PA10_Msk;
                SYS->ALT_MFP3        |= SYS_ALT_MFP3_PA11_PWM1_CH3|SYS_ALT_MFP3_PA10_PWM1_CH2;
               
                                /* Set GPF.4 multi-function pins for PWM1 Channel 4 to output IrDA code*/
                SYS->GPF_MFP &= ~(SYS_GPF_MFP_PF4_Msk);
                SYS->GPF_MFP |= (SYS_GPF_MFP_PF4_PWM1_CH4);
                SYS->ALT_MFP3        &= ~(SYS_ALT_MFP3_PF4_Msk);
                SYS->ALT_MFP3        |= (SYS_ALT_MFP3_PF4_PWM1_CH4);
               
                        /* Set GPF.5 multi-function pins for PWM1 Channel 5 to drive Head LED*/
                SYS->GPF_MFP &= ~(SYS_GPF_MFP_PF5_Msk);
                SYS->GPF_MFP |= (SYS_GPF_MFP_PF5_PWM1_CH5);
                SYS->ALT_MFP3        &= ~(SYS_ALT_MFP3_PF5_Msk);
                SYS->ALT_MFP3        |= (SYS_ALT_MFP3_PF5_PWM1_CH5);
               
                                SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB11_Msk);
                SYS->GPB_MFP |= (SYS_GPB_MFP_PB11_PWM0_CH4);
                SYS->ALT_MFP3        &= ~(SYS_ALT_MFP3_PB11_Msk);
                SYS->ALT_MFP3        |= (SYS_ALT_MFP3_PB11_PWM0_CH4);
               
                                        SYS->GPE_MFP &= ~(SYS_GPE_MFP_PE5_Msk);
                SYS->GPE_MFP |= (SYS_GPE_MFP_PE5_PWM0_CH5);
                SYS->ALT_MFP        &= ~(SYS_ALT_MFP_PE5_Msk);
                SYS->ALT_MFP        |= (SYS_ALT_MFP_PE5_PWM0_CH5);
               
                /* Set GPC.0/1/2/3 and GPD.15/14 multi-function pins for BPWM0 Channel 0 ~ channel 5 */
    SYS->GPC_MFP &= ~(SYS_GPC_MFP_PC0_Msk | SYS_GPC_MFP_PC1_Msk | SYS_GPC_MFP_PC2_Msk | SYS_GPC_MFP_PC3_Msk);
                SYS->GPC_MFP |= (SYS_GPC_MFP_PC0_BPWM0_CH0 | SYS_GPC_MFP_PC1_BPWM0_CH1 | SYS_GPC_MFP_PC2_BPWM0_CH2 | SYS_GPC_MFP_PC3_BPWM0_CH3);
                SYS->GPD_MFP &= ~(SYS_GPD_MFP_PD15_Msk | SYS_GPD_MFP_PD14_Msk);
           SYS->GPD_MFP |= (SYS_GPD_MFP_PD15_BPWM0_CH4 | SYS_GPD_MFP_PD14_BPWM0_CH5);
                SYS->ALT_MFP3        &= ~(SYS_ALT_MFP3_PC0_Msk | SYS_ALT_MFP3_PC1_Msk | SYS_ALT_MFP3_PC2_Msk | SYS_ALT_MFP3_PC3_Msk | SYS_ALT_MFP3_PD15_Msk | SYS_ALT_MFP3_PD14_Msk);
                SYS->ALT_MFP3        |= (SYS_ALT_MFP3_PC0_BPWM0_CH0 | SYS_ALT_MFP3_PC1_BPWM0_CH1 | SYS_ALT_MFP3_PC2_BPWM0_CH2 | SYS_ALT_MFP3_PC3_BPWM0_CH3 | SYS_ALT_MFP3_PD15_BPWM0_CH4 | SYS_ALT_MFP3_PD14_BPWM0_CH5);
               
                /* Set GPB.8/12, GPD.7/6 and GPF.0/1 multi-function pins for BPWM1 Channel 0 ~ channel 5 */
    SYS->GPD_MFP &= ~(SYS_GPD_MFP_PD7_Msk | SYS_GPD_MFP_PD6_Msk);
           SYS->GPD_MFP |= (SYS_GPD_MFP_PD7_BPWM1_CH0 | SYS_GPD_MFP_PD6_BPWM1_CH1);
                SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB8_Msk | SYS_GPB_MFP_PB12_Msk|SYS_GPB_MFP_PB15_Msk);
           SYS->GPB_MFP |= (SYS_GPB_MFP_PB8_BPWM1_CH2 | SYS_GPB_MFP_PB12_BPWM1_CH3|SYS_GPB_MFP_PB15_BPWM1_CH5);
                        SYS->ALT_MFP2 |=SYS_ALT_MFP2_PB15_BPWM1_CH5;
                SYS->GPF_MFP &= ~(SYS_GPF_MFP_PF8_Msk );
                SYS->GPF_MFP |= (SYS_GPF_MFP_PF8_BPWM1_CH4 );
                SYS->ALT_MFP3        &= ~(SYS_ALT_MFP3_PD7_Msk | SYS_ALT_MFP3_PD6_Msk | SYS_ALT_MFP3_PB8_Msk | SYS_ALT_MFP3_PB12_Msk | SYS_ALT_MFP3_PF8_Msk | SYS_ALT_MFP3_PB15_Msk);
                SYS->ALT_MFP3        |= (SYS_ALT_MFP3_PD7_BPWM1_CH0 | SYS_ALT_MFP3_PD6_BPWM1_CH1 | SYS_ALT_MFP3_PB8_BPWM1_CH2 | SYS_ALT_MFP3_PB12_BPWM1_CH3 | SYS_ALT_MFP3_PF8_BPWM1_CH4|SYS_ALT_MFP3_PB15_BPWM1_CH5);
                #endif
               
               
}

void UART0_Init()
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init UART                                                                                               */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Reset IP */
    SYS_ResetModule(UART0_RST);

    /* Configure UART0 and set UART0 Baudrate */
    UART_Open(UART0, 115200);
}



void PWM01_Init(void)
{

          /* Set PWM0/1 channel 0/2/4 as independent mode and down count type */
    PWM0->CTL1 = 0x0111;
                PWM1->CTL1 = 0x0111;
          /* Set BPWM0/1 all 6 channels as down count type */
    BPWM0->CTL1 = 0x01;
                BPWM1->CTL1 = 0x01;
               
                /* Enable all PWM0/1 channels output */
    PWM_EnableOutput(PWM0, 0x3F);
         PWM_EnableOutput(PWM1, 0x3F);
                /* Enable all BPWM0/1 channels output */
    BPWM_EnableOutput(BPWM0, 0x3F);
          BPWM_EnableOutput(BPWM1, 0x3F);
                       
}



unsigned int i,j,cnt;
void TMR0_IRQHandler(void)
{
    if(TIMER_GetIntFlag(TIMER0) == 1)
    {
        /* Clear Timer0 time-out interrupt flag */
        TIMER_ClearIntFlag(TIMER0);
        i=i+2;
                        j=j-2;
    }
}

void TMR1_IRQHandler(void)
{
    if(TIMER_GetIntFlag(TIMER1) == 1)
    {
        /* Clear Timer0 time-out interrupt flag */
        TIMER_ClearIntFlag(TIMER1);
        i=i+1;
                        cnt=cnt+1;
                        if(cnt==8)
                                cnt=0;
//        j=j-2;
    }
}

void TMR2_IRQHandler(void)
{
    if(TIMER_GetIntFlag(TIMER2) == 1)
    {
        /* Clear Timer0 time-out interrupt flag */
        TIMER_ClearIntFlag(TIMER2);
        i=i+1;
//        j=j-2;
    }
}



int updatedmode;
#define BLUE 0X1
#define RED  0x2
#define GREEN 0x3
#define YELLOW 0x04//green + red
#define PINK 0X05 //red + blue
#define CYAN 0x06 //green + blue
#define WHITE 0X07 //red+green_blue
#define NONE 0X00
int color_array_init[8][3]={//blue, red, green
{  0,                0,                0}, //none
{100,                0,                0}, //BLUE
{         0,        100,                0}, //RED
{         0,                0,        100}, //GREEN
{         0,        100,        100}, //YELLOW=red + green
{100,        100,                0}, //PINK
{100,                0,        100}, //CYAN
{100,        100,        100}  //WHITE
};

int color_array[8][3];

int r,g,b;


void color_table_adj(unsigned int color,int duty)
{
        if (color==BLUE)
        {
        color_array[BLUE][0]=duty;
        color_array[BLUE][1]=0;
  color_array[BLUE][2]=0;
        }
       
        if (color==RED)
        {
        color_array[RED][0]=0;
        color_array[RED][1]=duty;
  color_array[RED][2]=0;
        }
       
        if (color==GREEN)
        {
        color_array[GREEN][0]=0;
        color_array[GREEN][1]=0;
  color_array[GREEN][2]=duty;
        }
       
        if (color==YELLOW)
        {
        color_array[YELLOW][0]=0;
        color_array[YELLOW][1]=duty;
  color_array[YELLOW][2]=duty;
        }
       
        if (color==PINK)
        {
        color_array[PINK][0]=duty;
        color_array[PINK][1]=duty;
  color_array[PINK][2]=0;
        }
        if (color==CYAN)
        {
        color_array[CYAN][0]=duty;
        color_array[CYAN][1]=0;
  color_array[CYAN][2]=duty;
        }
       
        if (color==WHITE)
        {
        color_array[WHITE][0]=duty;
        color_array[WHITE][1]=duty;
  color_array[WHITE][2]=duty;
        }
}

void LED1(unsigned int color)
{   
  PWM_ConfigOutputChannel(PWM0, 0, 10000, color_array[color][0]);//B COLOR
        PWM_ConfigOutputChannel(PWM0, 1, 10000, color_array[color][1]);//R COLOR
        PWM_ConfigOutputChannel(PWM0, 2, 10000, color_array[color][2]);//g COLOR
}

void LED8(unsigned int color)
{   
  PWM_ConfigOutputChannel(PWM0, 3, 10000, color_array[color][0]);//B COLOR
        PWM_ConfigOutputChannel(PWM0, 4, 10000, color_array[color][1]);//R COLOR
        PWM_ConfigOutputChannel(PWM0, 5, 10000, color_array[color][2]);//g COLOR
}

void LED7(unsigned int color)
{   
BPWM_ConfigOutputChannel(BPWM0, 0, 10000, color_array[color][0]);//B COLOR
        BPWM_ConfigOutputChannel(BPWM0, 1, 10000, color_array[color][1]);//R COLOR
        BPWM_ConfigOutputChannel(BPWM0, 2, 10000, color_array[color][2]);//g COLOR
}

void LED6(unsigned int color)
{   
BPWM_ConfigOutputChannel(BPWM0, 3, 10000, color_array[color][0]);//B COLOR
        BPWM_ConfigOutputChannel(BPWM0, 4, 10000, color_array[color][1]);//R COLOR
        BPWM_ConfigOutputChannel(BPWM0, 5, 10000, color_array[color][2]);//g COLOR
}

void LED5(unsigned int color)
{   
  BPWM_ConfigOutputChannel(BPWM1, 0, 10000, color_array[color][0]);//B COLOR
        BPWM_ConfigOutputChannel(BPWM1, 1, 10000, color_array[color][1]);//R COLOR
        BPWM_ConfigOutputChannel(BPWM1, 2, 10000, color_array[color][2]);//g COLOR
}

void LED3(unsigned int color)
{   
  BPWM_ConfigOutputChannel(BPWM1, 3, 10000, color_array[color][0]);//B COLOR
        BPWM_ConfigOutputChannel(BPWM1, 4, 10000, color_array[color][1]);//R COLOR
        BPWM_ConfigOutputChannel(BPWM1, 5, 10000, color_array[color][2]);//g COLOR
}

void LED2(unsigned int color)
{   
  PWM_ConfigOutputChannel(PWM1, 0, 10000, color_array[color][0]);//B COLOR
        PWM_ConfigOutputChannel(PWM1, 1, 10000, color_array[color][1]);//R COLOR
        PWM_ConfigOutputChannel(PWM1, 2, 10000, color_array[color][2]);//g COLOR
}

void LED4(unsigned int color)
{   
  PWM_ConfigOutputChannel(PWM1, 3, 10000, color_array[color][0]);//B COLOR
        PWM_ConfigOutputChannel(PWM1, 4, 10000, color_array[color][1]);//R COLOR
        PWM_ConfigOutputChannel(PWM1, 5, 10000, color_array[color][2]);//g COLOR
}

void(*p_function[8])(unsigned int color)   ;


unsigned int temp;

/*---------------------------------------------------------------------------------------------------------*/
/*  Main Function                                                                                          */
/*---------------------------------------------------------------------------------------------------------*/
int32_t main(void)
{
    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Init System, IP clock and multi-function I/O */
    SYS_Init();

    /* Lock protected registers */
    //SYS_LockReg();

    /* Init UART to 115200-8n1 for print message */
  UART0_Init();
//        PA->PMD=0x55555555;
//        PB->PMD=0x55555555;
//        PC->PMD=0x55555555;
//  PD->PMD=0x55555555;
//  PE->PMD=0x55555555;
//  PF->PMD=0x55555555;       
       
//GPIO_SetMode(PA,BIT12,GPIO_PMD_OUTPUT);
//GPIO_SetMode(PA,BIT13,GPIO_PMD_OUTPUT);
//GPIO_SetMode(PA,BIT14,GPIO_PMD_OUTPUT);
//        PA12=0;
//        PA13=0;
//        PA14=0;
       
        #if 1
        PWM01_Init();
       
         // PWM0 channel 0 frequency is 100Hz, duty 30%,
  PWM_ConfigOutputChannel(PWM0, 0, 10000, 0);//B COLOR
        PWM_ConfigOutputChannel(PWM0, 1, 10000, 0);//R COLOR
        PWM_ConfigOutputChannel(PWM0, 2, 10000, 0);//g COLOR
       
        PWM_ConfigOutputChannel(PWM0, 3, 256000, 0);
        PWM_ConfigOutputChannel(PWM0, 4, 256000, 0);
        PWM_ConfigOutputChannel(PWM0, 5, 256000, 0);
       
        PWM_ConfigOutputChannel(PWM1, 0, 256000, 0);
        PWM_ConfigOutputChannel(PWM1, 1, 256000, 0);
        PWM_ConfigOutputChannel(PWM1, 2, 256000, 0);
       
        PWM_ConfigOutputChannel(PWM1, 3, 256000, 0);
        PWM_ConfigOutputChannel(PWM1, 4, 256000, 0);
        PWM_ConfigOutputChannel(PWM1, 5, 256000, 0);
       
       
        BPWM_ConfigOutputChannel(BPWM0, 0, 256000, 0);
        BPWM_ConfigOutputChannel(BPWM0, 1, 256000, 0);
        BPWM_ConfigOutputChannel(BPWM0, 2, 256000, 0);
       
        BPWM_ConfigOutputChannel(BPWM0, 3, 256000, 0);
        BPWM_ConfigOutputChannel(BPWM0, 4, 256000, 0);
        BPWM_ConfigOutputChannel(BPWM0, 5, 256000, 0);
       
        BPWM_ConfigOutputChannel(BPWM1, 0, 256000, 0);
        BPWM_ConfigOutputChannel(BPWM1, 1, 256000, 0);
        BPWM_ConfigOutputChannel(BPWM1, 2, 256000, 0);
       
        BPWM_ConfigOutputChannel(BPWM1, 3, 256000,0);
        BPWM_ConfigOutputChannel(BPWM1, 4, 256000, 0);
        BPWM_ConfigOutputChannel(BPWM1, 5, 256000, 0);

   

    /* Start all PWM0/1 counters */
    PWM_Start(PWM0, 0x3f);
                PWM_Start(PWM1, 0x3f);
                /* Start all BPWM0/1 counters */
    BPWM_Start(BPWM0, 0x1);
                BPWM_Start(BPWM1, 0x1);
                #endif
               
    p_function[0]= LED1;  
                p_function[1]= LED2;
                p_function[2]= LED3;
                p_function[3]= LED4;
                p_function[4]= LED5;
                p_function[5]= LED6;
                p_function[6]= LED7;
                p_function[7]= LED8;
                               
                (*p_function[0]) (BLUE);
                (*p_function[1]) (RED);
                (*p_function[2]) (GREEN);
                (*p_function[3]) (WHITE);
                (*p_function[4]) (PINK);
                (*p_function[5]) (YELLOW);
                (*p_function[6]) (CYAN);
                (*p_function[7]) (BLUE);
                       
                       
                       
                 CLK_EnableModuleClock(TMR0_MODULE);
                 CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0_S_HXT, 0);
                 TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 16);
     TIMER_EnableInt(TIMER0);
                 NVIC_EnableIRQ(TMR0_IRQn);
           TIMER_Start(TIMER0);
                                         
                CLK_EnableModuleClock(TMR1_MODULE);
          CLK_SetModuleClock(TMR1_MODULE, CLK_CLKSEL1_TMR1_S_HXT, 0);
                TIMER_Open(TIMER1, TIMER_PERIODIC_MODE,1);
    TIMER_EnableInt(TIMER1);
                NVIC_EnableIRQ(TMR1_IRQn);
                TIMER_Start(TIMER1);
                                         
                                        cnt=0;
                                        i=0;
                         temp=0;       
   
       
               
                while(1){
               

                       
               
                       
                if(i>80)
                {
                        i=1;
                        if (updatedmode==1)
                                updatedmode=0;
                        else
                        {
                                updatedmode=1;
                                j=80;
                        }                               
                }               
                if(updatedmode==0)
                {
                        color_table_adj(BLUE,i);
                       
      (*p_function[0]) (BLUE);
                        (*p_function[1]) (BLUE);
                        (*p_function[2]) (BLUE);
                        (*p_function[3]) (BLUE);
                        (*p_function[4]) (BLUE);
                        (*p_function[5]) (BLUE);
                        (*p_function[6]) (BLUE);
                        (*p_function[7]) (BLUE);
                        (*p_function[cnt]) (PINK);
                }
                 else
                 {
      color_table_adj(BLUE,j);       
        color_table_adj(PINK,100);
                  (*p_function[0]) (BLUE);
                        (*p_function[1]) (BLUE);
                        (*p_function[2]) (BLUE);
                        (*p_function[3]) (BLUE);
                        (*p_function[4]) (BLUE);
                        (*p_function[5]) (BLUE);
                        (*p_function[6]) (BLUE);
                        (*p_function[7]) (BLUE);
                         (*p_function[cnt]) (PINK);
                 }
       
                }       
                       
                       
                       
#if 0
                CLK_EnableModuleClock(TMR2_MODULE);
          CLK_SetModuleClock(TMR2_MODULE, CLK_CLKSEL1_TMR1_S_HXT, 0);
                TIMER_Open(TIMER2, TIMER_PERIODIC_MODE,2);
    TIMER_EnableInt(TIMER2);
                NVIC_EnableIRQ(TMR2_IRQn);
                TIMER_Start(TIMER2);
                                         i=0;
                                         temp=0;
                while(1){
                if(i!=temp)
                {
                temp=i;
                if(i==8)
                        i=0;
                (*p_function[0]) (GREEN);
                (*p_function[1]) (GREEN);
                (*p_function[2]) (GREEN);
                (*p_function[3]) (GREEN);
                (*p_function[4]) (GREEN);
                (*p_function[5]) (GREEN);
                (*p_function[6]) (GREEN);
                (*p_function[7]) (GREEN);
                (*p_function[i]) (BLUE);
               
               
                }
                       
                }
                #endif
               
                #if 0
                CLK_EnableModuleClock(TMR1_MODULE);
          CLK_SetModuleClock(TMR1_MODULE, CLK_CLKSEL1_TMR1_S_HXT, 0);
                TIMER_Open(TIMER1, TIMER_PERIODIC_MODE,100);
    TIMER_EnableInt(TIMER1);
                NVIC_EnableIRQ(TMR1_IRQn);
                TIMER_Start(TIMER1);
                                         i=0;
                                         temp=0;
                while(1){
                if(i!=temp)
                {
                temp=i;
                if(i==8)
                        i=0;
                (*p_function[0]) (NONE);
                (*p_function[1]) (NONE);
                (*p_function[2]) (NONE);
                (*p_function[3]) (NONE);
                (*p_function[4]) (NONE);
                (*p_function[5]) (NONE);
                (*p_function[6]) (NONE);
                (*p_function[7]) (NONE);
                (*p_function[i]) (BLUE);
               
               
                }
                       
                }
                #endif
                #if 0
                    CLK_EnableModuleClock(TMR0_MODULE);
                                  CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0_S_HXT, 0);
                                        TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 16);
    TIMER_EnableInt(TIMER0);
                    NVIC_EnableIRQ(TMR0_IRQn);
                                   TIMER_Start(TIMER0);
                                         i=0;
                       
    while(1){
       
                if(i>80)
                {
                        i=1;
                        if (updatedmode==1)
                                updatedmode=0;
                        else
                        {
                                updatedmode=1;
                                j=80;
                        }                               
                }               
                if(updatedmode==0)
                {
     PWM_ConfigOutputChannel(PWM0, 0, 16000,i);//B COLOR                 
                 PWM_ConfigOutputChannel(PWM0, 3, 16000,i);//B COLOR                 
                 PWM_ConfigOutputChannel(PWM1, 0, 16000,i);//B COLOR                 
                 PWM_ConfigOutputChannel(PWM1, 3, 16000,i);//B COLOR
                 BPWM_ConfigOutputChannel(BPWM0, 0, 16000, i);
                 BPWM_ConfigOutputChannel(BPWM0, 3, 16000, i);
                 BPWM_ConfigOutputChannel(BPWM1, 0, 16000, i);
                 BPWM_ConfigOutputChannel(BPWM1, 3, 16000, i);
                }
                 else
                 {               
                 PWM_ConfigOutputChannel(PWM0, 0, 16000,j);//B COLOR                 
                 PWM_ConfigOutputChannel(PWM0, 3, 16000,j);//B COLOR                 
                 PWM_ConfigOutputChannel(PWM1, 0, 16000,j);//B COLOR                 
                 PWM_ConfigOutputChannel(PWM1, 3, 16000,j);//B COLOR
                  BPWM_ConfigOutputChannel(BPWM0, 0, 16000,j);
                        BPWM_ConfigOutputChannel(BPWM0, 3, 16000, j);
                        BPWM_ConfigOutputChannel(BPWM1, 0, 16000, j);
                        BPWM_ConfigOutputChannel(BPWM1, 3, 16000, j);
                 }
       
                }
#endif
}




回复 支持 反对

使用道具 举报

5#
 楼主| monkey8088 发表于 2017-4-11 14:43:58 | 只看该作者
本帖最后由 monkey8088 于 2017-4-11 14:55 编辑

感謝您的程式分享
啟用設定看來沒什麼不同,就是會輸出高電位...
設成單純的GPIO是能正常輸出0和1
應該不是電路上的問題。
直接run你的程式是正常的,看來要認真看看有什麼不同了
感謝你的幫忙。
回复 支持 反对

使用道具 举报

6#
 楼主| monkey8088 发表于 2017-4-11 15:15:12 | 只看该作者
感謝你的分享~
用你的程式去修改,就可以用了~您的應該是64pin的

不過還是不知道錯在哪裡......

回复 支持 反对

使用道具 举报

7#
q450766221 发表于 2017-8-23 13:45:40 | 只看该作者
大量现货QQ450766221
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU