2346|0

650

帖子

8

TA的资源

纯净的硅(初级)

楼主
 

Max32630(二)——串口+RTC+MX25 [复制链接]

 许久没有发第二贴,今日再次分享下我与MX32630那些说不清道不明的事儿。
首先,发第一帖电灯后,论坛网友说程序下到开发板后灯不亮,而我测试时候灯也是亮的,这里就开始了一个说不清道不明的事儿了;
我再次把程序写如开发板,复位后,确实灯不亮了,几番重复后,依然无果;
于是从mbed上把LED的电灯程序编译出bin文件下载到开发板,这时灯亮了;
而在把我程序烧到开发板,灯也是亮的,但是如果重新上电,灯就有不亮了,这里不得不怀疑我程序有问题了;
从原理图到开发板各种找问题,都没有找到问题;
我按照mbed上代码初始化max14690,也不行,这里不知道有没有大神能解答下.....
mbed代码:
int MAX32630FTHR::init(vio_t hdrVio)
{
    // Override the default values
    max14690.ldo2Millivolts = 3300;
    max14690.ldo3Millivolts = 3300;
    max14690.ldo2Mode = MAX14690::LDO_ENABLED;
    max14690.ldo3Mode = MAX14690::LDO_ENABLED;
    max14690.monCfg = MAX14690::MON_HI_Z;
    // Note that writing the local value does directly affect the part
    // The buck-boost regulator will remain off until init is called

    // Call init to apply all settings to the PMIC
    if (max14690.init() == MAX14690_ERROR) {
        printf("Error initializing MAX14690");
    }
.....
}
我的mx14690初始化代码:
const max14690_cfg_t max14690_cfg2 = {
  .ldo2mv = 3300, /**< 3.3v in mV, connected to VDDB */
  .ldo2mode = MAX14690_LDO_ENABLED, /**< Enalbe LDO2 when +5v is present on VBUS */
  .ldo3mv = 3300,  /**< 3.3v is L3OUT -- optional */
  .ldo3mode = MAX14690_LDO_ENABLED /**< Enable the LDO. */
};

void LDO_Init(void)
{
        MAX14690_Init(&max14690_cfg2);
        MAX14690_MuxSet(MAX14690_MUX_SEL_HIZ,MAX14690_MUX_DIV_4);
       
}

几乎是按照mbed的一样配置了,但是仍然不行;
第二个事儿,我使用模拟SPI驱动OLED显示屏,显示驱动也是在STM32F4上无误的,但是移植到max32630上不行,折腾几天未果;
STM32F4代码:
  1. #define OLED_CS_PORT                GPIOA
  2. #define OLED_CS_PIN                        GPIO_Pin_0
  3. #define OLED_DC_PORT                GPIOA
  4. #define OLED_DC_PIN                        GPIO_Pin_1
  5. #define OLED_RST_PORT                GPIOA
  6. #define OLED_RST_PIN                GPIO_Pin_4
  7. #define OLED_SDA_PORT                GPIOC
  8. #define OLED_SDA_PIN                GPIO_Pin_1
  9. #define OLED_SCL_PORT                GPIOB
  10. #define OLED_SCL_PIN                GPIO_Pin_0

  11. #define OLED_CS(X)        X?GPIO_SetBits(OLED_CS_PORT, OLED_CS_PIN):GPIO_ResetBits(OLED_CS_PORT, OLED_CS_PIN)    //X为1时对应GPIO端口输出高电平,X为0时对应GPIO端口输出低电平

  12. #define OLED_RST(X)       X?GPIO_SetBits(OLED_RST_PORT, OLED_RST_PIN):GPIO_ResetBits(OLED_RST_PORT, OLED_RST_PIN)   

  13. #define OLED_DC(X)        X?GPIO_SetBits(OLED_DC_PORT, OLED_DC_PIN):GPIO_ResetBits(OLED_DC_PORT, OLED_DC_PIN)

  14. #define OLED_D0(X)        X?GPIO_SetBits(OLED_SDA_PORT, OLED_SDA_PIN):GPIO_ResetBits(OLED_SDA_PORT, OLED_SDA_PIN)   

  15. #define OLED_D1(X)        X?GPIO_SetBits(OLED_SCL_PORT, OLED_SCL_PIN):GPIO_ResetBits(OLED_SCL_PORT, OLED_SCL_PIN)   

  16. void Delay(uint32_t nCount)
  17. {
  18.         u8 i;
  19.         for(; nCount != 0; nCount--)
  20.         {
  21.                 for(i=0; i<10; i++);
  22.         }
  23. }


  24. //向SSD1306写入一个字节
  25. //dat:要写入的数据或者命令
  26. //cmd:数据或者命令 命令:0 数据:1
  27. /*        SPI写数据/命令
  28. *    Mode :O:写命令   1:写数据
  29. *    data :数据/命令
  30. *
  31. */
  32. void SPI_Write(char data, int Mode)
  33. {   
  34.     int i = 0;
  35.     if(Mode)
  36.     {
  37.         OLED_DC(1);        //DC引脚输入高,表示写数据
  38.     }
  39.     else
  40.     {
  41.         OLED_DC(0);        //DC引脚输入低,表示写命令
  42.     }
  43.     OLED_CS(0);            //CS引脚输入低,片选使能
  44.     for(i = 0; i < 8; i++)
  45.     {
  46.         OLED_D0(0);        //D0引脚输入低
  47.         if(data & 0x80)    //判断传输的数据最高位为1还是0
  48.         {
  49.             OLED_D1(1);    //D1引脚输入高
  50.         }
  51.         else
  52.         {
  53.             OLED_D1(0);    //D1引脚输入低
  54.         }
  55.         OLED_D0(1);        //D1引脚输入高
  56.         data <<= 1;        //将数据左移一位
  57.     }
  58.     OLED_DC(0);            //DC引脚输入低
  59.     OLED_CS(1);            //CS引脚输入高,片选失能
  60. }

  61. /*        设置OLED屏的显示坐标
  62. *      X : 表示OLED的水平坐标(0—127)
  63. *      Y : 表示OLED的页(0—7)
  64. *        
  65. */
  66. void OLED_Coord(unsigned char x, unsigned char y)
  67. {
  68.     SPI_Write((0xb0+(y & 0x0f)), 0);        //设置OLED显示的页   
  69.     SPI_Write((((x & 0xf0)>>4) | 0x10), 0);//设置OLED水平坐标的高4位
  70.     SPI_Write((x & 0x0f)|0x01, 0);                //设置OLED水平坐标的低4位
  71. }

  72. /*
  73. *        清除OLED的显示
  74. *
  75. *
  76. */
  77. void OLED_Clear(void)
  78. {
  79.     int i = 0, j = 0;
  80.     for(i = 0; i < 8; i++)
  81.     {
  82.         OLED_Coord(0, i);
  83.         for(j = 0; j < 128; j++)
  84.         {
  85.             SPI_Write(0x00, 1);
  86.         }
  87.     }
  88. }

  89. /*        关闭OLED显示
  90. *
  91. *
  92. */
  93. void OLED_Display_Off(void)
  94. {
  95.     //电荷泵设置(初始化时必须打开,否则看不到显示)
  96.     SPI_Write(0x8D, 0);
  97.     SPI_Write(0x10, 0);//bit2   0:关闭        1:打开
  98.     SPI_Write(0xAE, 0);//0xAE:关闭显示
  99. }

  100. /*
  101. *        开启OLED显示
  102. *
  103. */
  104. void OLED_Display_On(void)
  105. {
  106.     //电荷泵设置(初始化时必须打开,否则看不到显示)
  107.     SPI_Write(0x8D, 0);
  108.     SPI_Write(0x14, 0);//bit2   0:关闭        1:打开
  109.     SPI_Write(0xAF, 0);//0xAF:开显示   
  110. }

  111. /*        OLED显示参数的初始化
  112. *
  113. *
  114. *
  115. */
  116. void OLED_Init(void)
  117. {

  118.     OLED_RST(1);
  119.     Delay(100);
  120.     OLED_RST(0);
  121.     Delay(100);
  122.     OLED_RST(1);
  123.    
  124.     SPI_Write(0xAE, 0);//0xAE:关显示   
  125.    
  126.     SPI_Write(0x00, 0);//设置低列地址
  127.     SPI_Write(0x10, 0);//设置高列地址
  128.    
  129.     //设置行显示的开始地址(0-63)
  130.     //40-47: (01xxxxx)
  131.     SPI_Write(0x40, 0);
  132.    
  133.     //设置对比度
  134.     SPI_Write(0x81, 0);
  135.     SPI_Write(0xff, 0);//这个值越大,屏幕越亮(和上条指令一起使用)(0x00-0xff)
  136.    
  137.     SPI_Write(0xA1, 0);//0xA1: 左右反置,  0xA0: 正常显示(默认0xA0)
  138.     SPI_Write(0xC8, 0);//0xC8: 上下反置,  0xC0: 正常显示(默认0xC0)
  139.    
  140.     //0xA6: 表示正常显示(在面板上1表示点亮,0表示不亮)
  141.     //0xA7: 表示逆显示(在面板上0表示点亮,1表示不亮)
  142.     SPI_Write(0xA6, 0);
  143.    
  144.     SPI_Write(0xA8, 0);//设置多路复用率(1-64)
  145.     SPI_Write(0x3F, 0);//(0x01-0x3f)(默认为3f)
  146.    
  147.    
  148.     //设置显示抵消移位映射内存计数器
  149.     SPI_Write(0xD3, 0);
  150.     SPI_Write(0x00, 0);//(0x00-0x3f)(默认为0x00)
  151.    
  152.     //设置显示时钟分频因子/振荡器频率
  153.     SPI_Write(0xD5, 0);
  154.     //低4位定义显示时钟(屏幕的刷新时间)(默认:0000)分频因子= [3:0]+1
  155.     //高4位定义振荡器频率(默认:1000)
  156.     SPI_Write(0x80, 0);//
  157.    
  158.     //时钟预充电周期
  159.     SPI_Write(0xD9, 0);
  160.     SPI_Write(0xF1, 0);//[3:0],PHASE 1;   [7:4] PHASE 2
  161.    
  162.     //设置COM硬件应脚配置
  163.     SPI_Write(0xDA, 0);
  164.     SPI_Write(0x12, 0);//[5:4]  默认:01
  165.    
  166.     SPI_Write(0xDB, 0);//
  167.     SPI_Write(0x40, 0);//
  168.    
  169.     //设置内存寻址方式
  170.     SPI_Write(0x20, 0);
  171.     //00: 表示水平寻址方式
  172.     //01: 表示垂直寻址方式
  173.     //10: 表示页寻址方式(默认方式)
  174.     SPI_Write(0x02, 0);//   
  175.    
  176.     //电荷泵设置(初始化时必须打开,否则看不到显示)
  177.     SPI_Write(0x8D, 0);
  178.     SPI_Write(0x14, 0);//bit2   0:关闭        1:打开
  179.    
  180.     //设置是否全部显示 0xA4: 禁止全部显示
  181.     SPI_Write(0xA4, 0);

  182.     //0xA6: 表示正常显示(在面板上1表示点亮,0表示不亮)
  183.     //0xA7: 表示逆显示(在面板上0表示点亮,1表示不亮)
  184.     SPI_Write(0xA6, 0);//
  185.    
  186.     SPI_Write(0xAF, 0);//0xAF:开显示
  187.    
  188.     SPI_Write(0xAF, 0);//0xAF:开显示
  189.    
  190.     OLED_Clear();
  191. }

  192. /*        显示汉字
  193. *        x:表示显示的水平坐标
  194. *        y: 表示显示的垂直坐标
  195. *        *p: 表示要显示汉字模组的首地址
  196. */
  197. void OLED_ShowChinese(int x, int y, const unsigned char *p)
  198. {
  199.     int i = 0;
  200.     OLED_Coord(x, y);
  201.     for(i = 0; i < 32; i+=2)
  202.     {
  203.         SPI_Write(p[i], 1);
  204.     }
  205.     OLED_Coord(x, y+1);
  206.     for(i = 1; i < 32; i+=2)
  207.     {
  208.         SPI_Write(p[i], 1);
  209.     }
  210. }

  211. /*        显示ASCII
  212. *        x:表示显示的水平坐标
  213. *        y: 表示显示的垂直坐标
  214. *        *p: 表示要显示汉字模组的首地址
  215. */
  216. void OLED_ShowChar(int x, int y, const unsigned char p)
  217. {
  218.     int i = 0;
  219.     OLED_Coord(x, y);
  220.         if(p < 33)
  221.                 return;
  222.     for(i = 0; i < 16; i+=2)
  223.     {
  224.         SPI_Write(F8X16[p-32][i], 1);
  225.     }
  226.     OLED_Coord(x, y+1);
  227.     for(i = 1; i < 16; i+=2)
  228.     {
  229.         SPI_Write(F8X16[p-32][i], 1);
  230.     }
  231. }
复制代码

而移植过来的就改了IO口的操作;代码如下:
  1. #define OLED_CS(X)        X?OLED_CS_SET():OLED_CS_RESET()    //X为1时对应GPIO端口输出高电平,X为0时对应GPIO端口输出低电平

  2. #define OLED_RST(X)       X?OLED_RST_SET():OLED_RST_RESET()   

  3. #define OLED_DC(X)        X?OLED_DC_SET():OLED_DC_RESET()

  4. #define OLED_D0(X)        X?OLED_SDA_SET():OLED_SDA_RESET()   

  5. #define OLED_D1(X)        X?OLED_SCL_SET():OLED_SCL_RESET()  

  6. const gpio_cfg_t OLED[] = {
  7.         { PORT_5, PIN_3, GPIO_FUNC_GPIO, GPIO_PAD_NORMAL },
  8.     { PORT_3, PIN_3, GPIO_FUNC_GPIO, GPIO_PAD_NORMAL },
  9.     { PORT_3, PIN_2, GPIO_FUNC_GPIO, GPIO_PAD_NORMAL },
  10.     { PORT_3, PIN_4, GPIO_FUNC_GPIO, GPIO_PAD_NORMAL },
  11.     { PORT_3, PIN_5, GPIO_FUNC_GPIO, GPIO_PAD_NORMAL },
  12. };
  13. void OLED_CS_SET(void)
  14. {
  15.         GPIO_OutSet(&OLED[0]);
  16. }
  17. void OLED_CS_RESET(void)
  18. {
  19.         GPIO_OutClr(&OLED[0]);
  20. }
  21. void OLED_DC_SET(void)
  22. {
  23.         GPIO_OutSet(&OLED[1]);
  24. }
  25. void OLED_DC_RESET(void)
  26. {
  27.         GPIO_OutClr(&OLED[1]);
  28. }
  29. void OLED_RST_SET(void)
  30. {
  31.         GPIO_OutSet(&OLED[2]);
  32. }
  33. void OLED_RST_RESET(void)
  34. {
  35.         GPIO_OutClr(&OLED[2]);
  36. }
  37. void OLED_SDA_SET(void)
  38. {
  39.         GPIO_OutSet(&OLED[3]);
  40. }
  41. void OLED_SDA_RESET(void)
  42. {
  43.         GPIO_OutClr(&OLED[3]);
  44. }
  45. void OLED_SCL_SET(void)
  46. {
  47.         GPIO_OutSet(&OLED[4]);
  48. }
  49. void OLED_SCL_RESET(void)
  50. {
  51.         GPIO_OutClr(&OLED[4]);
  52.        
  53. }
复制代码


这里不知道是IO口模式不正确还是什么原因,不过还没用示波器看波形,下周看下波形;
接着就是串口,这个比较简单,调通了,不过如果大家要用printf打印信息的话,需要改一个东西:
board.h文件下
#ifndef CONSOLE_UART
#define CONSOLE_UART        1   /**< UART instance to use for the serial console. */
#endif

需要把串口改为1,因为 开发板上串口1与DAP调试板相连,其他就没什么问题了,程序就可以直接用printf打印看数据了
附上代码:
  1. #define         BUFF_SIZE        1

  2. /***** Globals *****/
  3. volatile int read_flag1;
  4. volatile int read_flag2;
  5. uint8_t rxdata1[BUFF_SIZE];
  6. uint8_t rxdata2[BUFF_SIZE];
  7. /***** Functions *****/

  8. /******************************************************************************/
  9. void read_cb1(uart_req_t* req, int error) {
  10.         read_flag1 = error;
  11. }
  12. /******************************************************************************/
  13. void read_cb2(uart_req_t* req, int error) {
  14.         read_flag2 = error;
  15. }
  16. /******************************************************************************/
  17. void UART1_IRQHandler(void) {
  18.         UART_Handler(MXC_UART1);
  19. }
  20. void UART2_IRQHandler(void) {
  21.         UART_Handler(MXC_UART2);
  22. }


  23. uart_req_t read_req2;
  24. uart_req_t read_req1;
  25. int Usart2_Init(void)
  26. {
  27.     int error;
  28.         sys_cfg_uart_t sys_cfg;
  29.        
  30.        
  31.        
  32.         NVIC_ClearPendingIRQ(MXC_UART_GET_IRQ(2));
  33.         NVIC_DisableIRQ(MXC_UART_GET_IRQ(2));
  34.         NVIC_SetPriority(MXC_UART_GET_IRQ(2), 1);
  35.         NVIC_EnableIRQ(MXC_UART_GET_IRQ(2));
  36.        
  37.         uart_cfg_t cfg;
  38.         cfg.parity = UART_PARITY_DISABLE;
  39.         cfg.size = UART_DATA_SIZE_8_BITS;
  40.         cfg.extra_stop = 1;
  41.         cfg.cts = 0;
  42.         cfg.rts = 0;
  43.         cfg.baud = 9600;

  44.        
  45.         sys_cfg.clk_scale = CLKMAN_SCALE_AUTO;
  46. sys_cfg.io_cfg = (ioman_cfg_t)IOMAN_UART(1, IOMAN_MAP_A, IOMAN_MAP_A, IOMAN_MAP_A, 1, 1, 1);

  47. // Wait for the console UART to finish
  48.         while (UART_Busy(MXC_UART_GET_UART(2))) {
  49.         }

  50.           error = UART_Init(MXC_UART2, &cfg, &sys_cfg);
  51.         UART_Init(MXC_UART_GET_UART(2), &console_uart_cfg, NULL);
  52.        
  53.         if (error != E_NO_ERROR) {
  54.                 printf("Error initializing UART2 %d\n", error);
  55.                 while (1) {
  56.                 }
  57.         } else {
  58.                 printf("UART2 Initialized\n");
  59.         }
  60.        
  61.         if (error != E_NO_ERROR) {
  62.                 printf("Error initializing UART2 %d\n", error);
  63.                 while (1) {
  64.                 }
  65.         } else {
  66.                 printf("UART2 Initialized\n");
  67.         }

  68.        
  69.         read_req2.data = rxdata2;
  70.         read_req2.len = BUFF_SIZE;
  71.         read_req2.callback = read_cb2;
  72.        
  73.         read_flag2 = 1;

  74.        

  75.     return E_NO_ERROR;
  76. }
  77. void Usart2_Recive(void)
  78. {
  79.         int error;
  80.         error = UART_ReadAsync(MXC_UART2, &read_req2);
  81.                 if (error != E_NO_ERROR) {
  82. //                        printf("Error starting async read %d\n", error);
  83. //                        while (1) {
  84. //                        }
  85.                 }
  86.                 if(read_flag2 == E_NO_ERROR)
  87.                 {
  88.                         Kfifo_Put(&Gpsfifo,rxdata2,1);
  89.                         printf("%s",rxdata2);
  90.                         memset(rxdata2, 0x0, BUFF_SIZE);
  91.                         read_flag2 = 1;
  92.                 }
  93. }

  94. void Usart1_Recive(void)
  95. {
  96.         int error;
  97.         error = UART_ReadAsync(MXC_UART1, &read_req1);
  98.                 if (error != E_NO_ERROR) {
  99. //                        printf("Error starting async read %d\n", error);
  100. //                        while (1) {
  101. //                        }
  102.                 }
  103.                 if(read_flag1 == E_NO_ERROR)
  104.                 {
  105.                        
  106.                         printf("%s",rxdata1);
  107.                         memset(rxdata1, 0x0, BUFF_SIZE);
  108.                         read_flag1 = 1;
  109.                 }
  110. }
  111. int CONSOLE_UART_Init(void)
  112. {
  113.     int error;
  114.         uart_req_t read_req;
  115.        
  116.        
  117.         sys_cfg_uart_t sys_cfg;
  118.        
  119.         NVIC_ClearPendingIRQ(MXC_UART_GET_IRQ(1));
  120.         NVIC_DisableIRQ(MXC_UART_GET_IRQ(1));
  121.         NVIC_SetPriority(MXC_UART_GET_IRQ(1), 1);
  122.         NVIC_EnableIRQ(MXC_UART_GET_IRQ(1));
  123.        
  124.         uart_cfg_t cfg;
  125.         cfg.parity = UART_PARITY_DISABLE;
  126.         cfg.size = UART_DATA_SIZE_8_BITS;
  127.         cfg.extra_stop = 1;
  128.         cfg.cts = 0;
  129.         cfg.rts = 0;
  130.         cfg.baud = CONSOLE_BAUD;

  131.        
  132.         sys_cfg.clk_scale = CLKMAN_SCALE_AUTO;
  133. sys_cfg.io_cfg = (ioman_cfg_t)IOMAN_UART(1, IOMAN_MAP_A, IOMAN_MAP_A, IOMAN_MAP_A, 1, 1, 1);

  134. // Wait for the console UART to finish
  135.         while (UART_Busy(MXC_UART_GET_UART(CONSOLE_UART))) {
  136.         }

  137.           error = UART_Init(MXC_UART1, &cfg, &sys_cfg);
  138.         UART_Init(MXC_UART_GET_UART(CONSOLE_UART), &console_uart_cfg, NULL);
  139.        
  140.         if (error != E_NO_ERROR) {
  141.                 printf("Error initializing UART1 %d\n", error);
  142.                 while (1) {
  143.                 }
  144.         } else {
  145.                 printf("UART1 Initialized\n");
  146.         }
  147.        
  148.         if (error != E_NO_ERROR) {
  149.                 printf("Error initializing UART1 %d\n", error);
  150.                 while (1) {
  151.                 }
  152.         } else {
  153.                 printf("UART1 Initialized\n");
  154.         }

  155.        
  156.         read_req1.data = rxdata1;
  157.         read_req1.len = BUFF_SIZE;
  158.         read_req1.callback = read_cb1;
  159.        
  160.         read_flag1 = 1;

  161.     return E_NO_ERROR;
  162. }
复制代码

最后就是RTC了,这个也比较简单,把例子中的代码移植过来,稍微更改下就可以了;
附上代码:
  1. /***** Definitions *****/
  2. #define LED_Alarm0                  0
  3. #define LED_Alarm1                  1
  4. #define LED_tick                  2

  5. #define ALARM0_SEC        3
  6. #define ALARM1_SEC        5
  7. #define SNOOZE_SEC        7

  8. /***** Globals *****/


  9. /***** Functions *****/

  10. void pb_handler_ResetRTC()
  11. {
  12.     //turn off alarm LEDs


  13.     //clear all alarm flags and enable them
  14.     RTC_ClearFlags(MXC_F_RTC_FLAGS_COMP0 | MXC_F_RTC_FLAGS_COMP1);
  15.     RTC_EnableINT(MXC_F_RTC_INTEN_COMP0 | MXC_F_RTC_INTEN_COMP1);

  16.     //reset alarm 1 time to 5secs
  17.     RTC_SetCompare(1,5);

  18.     //reset RTC timer to 0
  19.     RTC_SetCount(0);
  20.     printf("RTC Reset\n");
  21. }

  22. void pb_handler_SetSnooze()
  23. {

  24.     //set snooze
  25.     RTC_Snooze();

  26.     //enable alarm 1 interrupt
  27.     RTC_EnableINT(MXC_F_RTC_INTEN_COMP1);

  28.     printf("RTC Snooze\n");
  29. }

  30. void pb_handler_GetCount()
  31. {
  32.     int count = RTC_GetCount();
  33.     printf("RTC count = %d,\n", count);
  34. }

  35. void RTC0_handler_Compare0()
  36. {
  37.     printf("RTC COMP0 Interrupt\n");

  38.     //turn alarm0 LED on
  39.     LED_On(LED_Alarm0);

  40.     //disable interrupt
  41.     RTC_DisableINT(MXC_F_RTC_INTEN_COMP0);

  42.     //clear flag
  43.     RTC_ClearFlags(MXC_F_RTC_FLAGS_COMP0);
  44. }

  45. void RTC1_handler_Compare1()
  46. {
  47.     printf("RTC COMP1 Interrupt\n");

  48.     //turn alarm1 LED on
  49.     LED_On(LED_Alarm1);

  50.     //disable interrupt
  51.     RTC_DisableINT(MXC_F_RTC_INTEN_COMP1);

  52.     //clear flag
  53.     RTC_ClearFlags(MXC_F_RTC_FLAGS_COMP1);
  54. }

  55. void RTC2_handler_PrescalerCMP()
  56. {
  57.     //toggle tick LED
  58.     LED_Toggle(LED_tick);

  59.     //clear flag
  60.     RTC_ClearFlags(MXC_F_RTC_FLAGS_PRESCALE_COMP);
  61. }

  62. void RTC_Setup()
  63. {
  64.     rtc_cfg_t RTCconfig;

  65.     //set RTC configuration
  66.     RTCconfig.compareCount[0] = 0; //alarm0 time in seconds
  67.     RTCconfig.compareCount[1] = 0; //alarm1 time in seconds
  68.     RTCconfig.prescaler = RTC_PRESCALE_DIV_2_12; //1Hz clock
  69.     RTCconfig.prescalerMask = RTC_PRESCALE_DIV_2_11;//0.5s prescaler compare
  70.     RTCconfig.snoozeCount = 0;//snooze time in seconds
  71.     RTCconfig.snoozeMode = RTC_SNOOZE_DISABLE;
  72.     RTC_Init(&RTCconfig);

  73.     //setup interrupt callbacks and enable
  74. //    NVIC_SetVector(MXC_F_RTC_INTEN_TRIM, RTC0_handler_Compare0);
  75. //    NVIC_SetVector(RTC1_IRQn, RTC1_handler_Compare1);
  76. //    NVIC_SetVector(RTC2_IRQn, RTC2_handler_PrescalerCMP);

  77. //    RTC_EnableINT(MXC_F_RTC_INTEN_TRIM );

  78.     //start RTC
  79.     RTC_Start();
  80.        
  81.         rtc_reinit();
  82. }
复制代码

不过这个RTC也是只有秒的计数值,还需要自己计算年月日。
好了,就到这儿,周末公司组织活动,下周继续分析问题;祝大家有一个愉快的周末


点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表