(转载) K60新手入门资料

2020-02-20 20:07发布

转载地址:http://www.cnblogs.com/hebaichuanyeah/tag/K60/

希望给坛友们提供个方便,直接在坛内找到资源,越来越强大,谢谢,


第一 、 K60初体验之GPIO寄存器

一个简单的流水灯
  1. #include "common.h"

  2. #define LED1(a) if(a)
  3.                    GPIOA_PDOR &= ~(1<<10);
  4.                else
  5.                    GPIOA_PDOR |= (1<<10)   

  6.                   
  7. #define LED2(a) if(a)
  8.                    GPIOA_PDOR &= ~(1<<11);
  9.                else
  10.                    GPIOA_PDOR |= (1<<11)        
  11. #define LED3(a) if(a)
  12.                    GPIOA_PDOR &= ~(1<<28);
  13.                else
  14.                    GPIOA_PDOR |= (1<<28)
  15.                   
  16. #define LED4(a) if(a)
  17.                    GPIOA_PDOR &= ~(1<<29);
  18.                else
  19.                    GPIOA_PDOR |= (1<<29)   
  20.                      
  21. void init_gpio(void);
  22. void delay(long count);


  23. void main (void)
  24. {
  25.   init_gpio();

  26.   LED2(0);  
  27.   LED3(0);
  28.   
  29.   while(1)
  30.   {
  31.     LED4(0);   //灭
  32.     LED1(1);   //亮
  33.     delay(3000000);
  34.     LED2(1);
  35.     LED1(0);
  36.     delay(3000000);
  37.     LED3(1);
  38.     LED2(0);
  39.     delay(3000000);
  40.     LED3(0);
  41.     LED4(1);
  42.     delay(3000000);
  43.   }
  44. }

  45. void init_gpio()
  46. {

  47.   PORTA_PCR10 &= ~0x700;    //MUX 000
  48.   PORTA_PCR10 |= PORT_PCR_MUX(1);   //MUX 001 GPIO模式
  49.   PORTA_PCR11 &= ~0x700;
  50.   PORTA_PCR11 |= PORT_PCR_MUX(1);  
  51.   PORTA_PCR28 &= ~0x700;
  52.   PORTA_PCR28 |= PORT_PCR_MUX(1);  
  53.   PORTA_PCR29 &= ~0x700;
  54.   PORTA_PCR29 |= PORT_PCR_MUX(1);  
  55.   
  56.   GPIOA_PDDR |= ((1<<10)|(1<<11)|(1<<28)|(1<<29));  //设置为输出
  57. }

  58. void delay(long count)
  59. {
  60.   while(count--)
  61.       asm("nop");
  62. }
复制代码


第二、K60  UART寄存器 串口收发数据

main.c 文件
  1. #include "common.h"
  2. #include "uart.h"
  3. #include "isr.h"

  4. void UART4_Init(U32);                     
  5. void delay(long count);
  6. void Uart4_SendByte(U8 Char);


  7. void main (void)
  8. {
  9.   char str[]="hello cortex-m4  ";
  10.   U8 i;
  11.   
  12.   DisableInterrupts;  
  13.   UART4_Init(57600);
  14.   EnableInterrupts;
  15.   
  16.   while(1)
  17.   {
  18.     for(i=0; str[i]!=''; i++)
  19.       Uart4_SendByte(str[i]);
  20.     delay(7000000);
  21.   }
  22. }

  23. void delay(long count)
  24. {
  25.   while(count--)
  26.       asm("nop");
  27. }

  28. void UART4_Init(U32 BaudRate)
  29. {
  30.   U16 ubd, brfa;

  31.   U8 temp;
  32.    
  33.   PORTC_PCR15 = PORT_PCR_MUX(0x3);   //引脚使能
  34.   PORTC_PCR14 = PORT_PCR_MUX(0x3);
  35.   SIM_SCGC1 |= SIM_SCGC1_UART4_MASK;   //时钟使能


  36.   UART4_C2 &= ~((1<<2) | (1<<3)); //禁止发送接收   控制寄存器C2
  37.   
  38.   UART4_C1 = 0;  //控制器C1 全部使用默认配备

  39.   ubd = (U16)((50000000)/(BaudRate * 16));   //波特率设置

  40.   UART4_BDH = (U8)ubd>>8;  
  41.   UART4_BDL = (U8)(ubd);
  42.   
  43.   
  44.   brfa = (((50000000)/(BaudRate * 16)) - (ubd * 32));  //波特率微调 1/32的增量

  45.   temp = UART4_C4 & ~(UART_C4_BRFA(0x1F));
  46.   UART4_C4 = temp | UART_C4_BRFA(brfa);
  47.   

  48.   UART4_C2 |= ((1<<2) | (1<<3));  //允许发送接收

  49.   return;
  50. }

  51. void Uart4_SendByte(U8 Char)
  52. {

  53.     while(!(UART_S1_REG(UART4_BASE_PTR) & UART_S1_TDRE_MASK)); //UARTx_S1状态寄存器
  54.     UART4_D = Char;
  55.     return;
  56. }
复制代码

串口接收函数
  1. U8 Uart4_Receive(void)
  2. {
  3.     U8 Receivechar;
  4.     while(!(UART_S1_REG(UART4_BASE_PTR) & UART_S1_RDRF_MASK));       //查询是否接受到数据
  5.     Receivechar  =   UART4_D;                    //接受到8位的数据
  6.     return(Receivechar);
  7. }
复制代码

第三、K60 外部引脚中断

PA12引脚中断初始化:
  1. void Exit_Init(void)
  2. {
  3.   SIM_SCGC5 |= (1<<9);      //开启PORTA端口
  4.   
  5.   PORTA_PCR12 |= (1<<8) | (10<<16) | (3);  //GPIO 下降沿触发 上拉电阻
  6.   GPIOA_PDDR &= ~(1<<12);           //输入模式
  7.   enable_irq(87);   //使能PORT中断
  8. }
复制代码

中断服务函数:
  1. #include "common.h"
  2. #include "isr.h"

  3. char str[] = "EXIT  ";
  4. U8 i;

  5. void PORTA_IRQHandler(void)
  6. {

  7.     if(PORTA_ISFR & (1<<12))             //PTA12触发中断
  8.     {
  9.         PORTA_ISFR  |= (1<<12);          //写1清中断标志位
  10.         for(i=0; str[i]!=''; i++)
  11.             Uart4_SendByte(str[i]);        
  12.     }
  13. }
复制代码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
franki
1楼-- · 2020-02-22 22:26
寄存器版本的 ,还没用到库
Juggernaut
2楼-- · 2020-02-23 02:33
还是喜欢lib版本的
Juggernaut
3楼-- · 2020-02-23 07:27
32MCU 发表于 2014-12-25 13:52
新手最好还是买本书看。
工程师经验手记系列:

这本书真心不错,推荐
秦天
4楼-- · 2020-02-23 07:32
32MCU 发表于 2014-12-25 13:52
新手最好还是买本书看。
工程师经验手记系列:

这本书教得挺细的 可惜没有电子版 看样子只能买本实体书了 可以收藏
craigtao
5楼-- · 2020-02-23 07:47
 精彩回答 2  元偷偷看……

一周热门 更多>