查看: 1188|回复: 0

【S08P闯关赛经验分享】+点灯

[复制链接]
  • TA的每日心情
    开心
    2024-3-22 17:30
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    5

    主题

    87

    帖子

    1

    高级会员

    Rank: 4

    积分
    920
    最后登录
    2024-4-18
    发表于 2020-7-9 17:41:02 | 显示全部楼层 |阅读模式
          板子收到有段时间了,刚收到时遇到个坑,示例代码没有关狗,烧进去就变砖了,也没仔细看手册,扔了段时间。这几天得空重新找出来,慢慢啃手册,写了个看门狗的操作宏,端口操作的宏。灯也是要亮瞎狗眼的节奏,把限流的电阻换成了5.1K,看着顺眼多了。

    微信图片_20200709173803.jpg



    /*
    * wdt.h
    *
    *  Created on: Jul 9, 2020
    *      Author: Haifeng
    */

    #ifndef WDT_H_
    #define WDT_H_

    #define        WDT_UnLock()        do{        \
            WDOG_CNT = 0xc520;                \
            WDOG_CNT = 0xd928;                \
    }while(0)

    //默认使用1K时钟,设定时间单位为ms,最长时间65535ms
    #define WDT_Init(Value)        do{        \
            DisableInterrupts;                \
            WDT_UnLock();                        \
            WDOG_TOVAL = Value;                \
            WDOG_CS2 = WDOG_CS2_CLK_MASK;        \
            WDOG_CS1 = WDOG_CS1_EN_MASK;        \
            EnableInterrupts;                \
    }while(0)

    #define        WDT_Clr()        do{        \
            WDOG_CNT = 0xA602U;        \
            WDOG_CNT = 0xB480U;        \
    }while(0)

    #endif /* WDT_H_ */


    /*
    * gpio.h
    *
    *  Created on: Jul 6, 2020
    *      Author: Haifeng
    */

    #ifndef PORT_H_
    #define PORT_H_

    //bit0 = outpu, bit1 = inputt, bit2 = pull
    enum{
            PORT_MODE_OUT = 0x01,
            PORT_MODE_IN_NULL = 0x02,
            PORT_MODE_IN_PULL = 0x06,
    };

    enum{
            PTA,
            PTB,
            PTC,
            PTD,
            PTE,
            PTF,
            PTG,
            PTH,
    };

    #define        PORT_Init(PORTx, PINx, Value, MODEx)        do{                        \
            if(MODEx & 0x01) PORT_##PORTx##OE |= (1 << PINx);                \
            else                          PORT_##PORTx##OE &= (~(1 << PINx));        \
            if(MODEx & 0x02) PORT_##PORTx##IE |= (1 << PINx);                \
            else                          PORT_##PORTx##IE &= (~(1 << PINx));        \
            if(MODEx & 0x04) PORT_##PORTx##PE |= (1 << PINx);                \
            else                          PORT_##PORTx##PE &= (~(1 << PINx));        \
            if(Value != 0)   PORT_##PORTx##D |= (1 << PINx);                \
            else                          PORT_##PORTx##D &= (~(1 << PINx));                \
    }while(0)

    #define        PORT_PinWrite(PORTx, PINx, Value)        do{                                \
            if(Value != 0)   PORT_##PORTx##D |= (1 << PINx);                \
            else                          PORT_##PORTx##D &= (~(1 << PINx));                \
    }while(0)

    #define        PORT_PinRead(PORTx, PINx)        ((PORT_##PORTx##D & (~(1 << PINx))) ? 1 : 0)

    #endif /* GPIO_H_ */


    /*
    * led.h
    *
    *  Created on: Jul 6, 2020
    *      Author: Haifeng
    */

    #ifndef LED_H_
    #define LED_H_

    #define        LED1_Init()                        PORT_Init(PTE, 7, 0, PORT_MODE_OUT)
    #define        LED1_Write(Value)        PORT_PinWrite(PTE, 7, Value)

    #define        LED2_Init()                        PORT_Init(PTG, 0, 0, PORT_MODE_OUT)
    #define        LED2_Write(Value)        PORT_PinWrite(PTG, 0, Value)

    #define        LED3_Init()                        PORT_Init(PTG, 1, 0, PORT_MODE_OUT)
    #define        LED3_Write(Value)        PORT_PinWrite(PTG, 1, Value)

    #define        LED4_Init()                        PORT_Init(PTG, 2, 0, PORT_MODE_OUT)
    #define        LED4_Write(Value)        PORT_PinWrite(PTG, 2, Value)

    #define        LED5_Init()                        PORT_Init(PTG, 3, 0, PORT_MODE_OUT)
    #define        LED5_Write(Value)        PORT_PinWrite(PTG, 3, Value)

    #define        LED6_Init()                        PORT_Init(PTH, 2, 0, PORT_MODE_OUT)
    #define        LED6_Write(Value)        PORT_PinWrite(PTH, 2, Value)

    #define        LED7_Init()                        PORT_Init(PTH, 6, 0, PORT_MODE_OUT)
    #define        LED7_Write(Value)        PORT_PinWrite(PTH, 6, Value)

    #define        LED8_Init()                        PORT_Init(PTH, 7, 0, PORT_MODE_OUT)
    #define        LED8_Write(Value)        PORT_PinWrite(PTH, 7, Value)

    extern void LED_Init(void);
    extern void LED_Display(unsigned char Value);

    #endif /* LED_H_ */


    #include <hidef.h> /* for EnableInterrupts macro */
    #include "derivative.h" /* include peripheral declarations */


    void        DELAY_Ms(int tMs)
    {
            int tUs;
            while(tMs--)
            {
                    tUs = 250;
                    while(tUs --);
            }
    }


    void main(void)
    {
            unsigned char i = 0x00;
           
            WDT_Init(10000);
            DisableInterrupts;
      /* include your code here */
            LED_Init();


      for(;;)
      {
        WDT_Clr();        /* feeds the dog */
        LED_Display(~i++);
        /*
        if((i & 0x80) == 0)
        {
                i = (i << 1) | 0x01;
        }
        else
        {
                i = 0;
        }
        */
        DELAY_Ms(250);
      } /* loop forever */
      /* please make sure that you never leave main */
    }


    今天天气不错!签到!
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-29 17:17 , Processed in 0.102581 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表