再看K60——寄存器配置
来源:互联网 发布:我的世界编程游戏 编辑:程序博客网 时间:2024/05/16 08:00
今天心血来潮,重新去看了K60的寄存器和数据手册,配上超核的视频,去网上搜查相关资料,每次看视频的感觉都不同,至少现在看来寄存器的配置的基本步骤都差不多,虽然现在也只是会配简单的寄存器。现在把今天所学的记录下来:
#include <MK60D10.h>void PIT0_IRQHandler()//pit定时中断{ PIT->CHANNEL[0].TFLG =PIT_TFLG_TIF_MASK;//一定要清零 // PTA->PTOR =1<<17;//翻转 PTA->PDOR =~PTA->PDOR;}void PORTB_IRQHandler(){ if(PORTB->ISFR &(1<<5))//某个标志位为0 { PTC->PTOR =1<<0;//测试 // PORTB->ISFR =1<<5;//清中断标志位 PORTB->PCR[5] |=PORT_PCR_ISF_MASK;//这个也可以清中断 }}void SysTick_Handler(void)//它的中断自动清零{ PTA->PDOR =~PTA->PDOR ;}void UART4_init(long baud)//UART4初始化{ uint16_t sbr; uint8_t brfa; /*UART 查询发送,中断接收*/ SIM->SCGC1 |= SIM_SCGC1_UART4_MASK; SIM->SCGC5 |=SIM_SCGC5_PORTE_MASK; /*E24 --Tx*/ PORTE->PCR[24] &=~PORT_PCR_MUX_MASK; PORTE->PCR[24] |= PORT_PCR_MUX(3); /*E25 --Rx*/ PORTE->PCR[25] &=~PORT_PCR_MUX_MASK; PORTE->PCR[25] |= PORT_PCR_MUX(3); UART4->C2 &=~(UART_C2_RE_MASK |UART_C2_TE_MASK);//控制器c2,控制发送接收以及中断 UART4->C1=0; //使用默认值 sbr=(uint16_t)(41940000/(16*baud));//bus_clock 14.94M UART4->BDH=(uint8_t)sbr>>8;//UART_BDH_SBR(sbr>>8);//取出高八位 UART4->BDL=(uint8_t)sbr;// UART_BDL_SBR(sbr);// 取出低八位 brfa = (32*41940000/((baud)*16)) - 32*sbr; //波特率微调 1/32的增量 UART4->C4=UART_C4_BRFA(brfa);//具体看c4的brfa定义 UART4->C2 |=(UART_C2_RE_MASK |UART_C2_TE_MASK);}/*LPTMER初始化*/void Delay_Lptmer(uint32_t time){ SIM->SCGC5=SIM_SCGC5_LPTIMER_MASK; LPTMR0->CMR=time;//设置比较值 LPTMR0->CSR |=LPTMR_CSR_TEN_MASK;//lptmer CNR应该是个增量的0-》count LPTMR0->PSR = LPTMR_PSR_PCS(1)| LPTMR_PSR_PBYP_MASK; //PCS:01 LPO——1KHz的时钟 PBYP:1,后面一个不大理解 while(!(LPTMR0->CSR&LPTMR_CSR_TCF_MASK));//CNR与CMR比较 LPTMR0->CSR &=~LPTMR_CSR_TEN_MASK;}void send_str(char *str)//输出字符串{ for(int i=0;str[i]!='\0';i++) { while(!( UART4->S1 &UART_S1_TDRE_MASK)); UART4->D=str[i]; }}void send_char(char c){ //输入字符 UART4->D= c; while(!( UART4->S1 &UART_S1_TDRE_MASK));}int main(){ char str[]="Hello World!"; /*GPIO*/ SIM->SCGC5 |=SIM_SCGC5_PORTA_MASK; PORTA->PCR[17] &=~PORT_PCR_MUX_MASK; PORTA->PCR[17] |=PORT_PCR_MUX(1); PTA->PDDR |=1<<17; PTA->PDOR &=~(1<<17); SIM->SCGC5 |=SIM_SCGC5_PORTC_MASK; PORTC->PCR[0] &=~PORT_PCR_MUX_MASK; PORTC->PCR[0] |=PORT_PCR_MUX(1); PTC->PDDR |=1<<0; PTC->PDOR &=~(1<<0); /*GPIOB中断*/ SIM->SCGC5 |=SIM_SCGC5_PORTB_MASK; PORTB->PCR[5] &=~PORT_PCR_IRQC_MASK; /*原来一个小小的GPIO中断就有这么复杂,先要中断方式,设置GPIO(一定要),后面两个开启上拉功能*/ PORTB->PCR[5] |=PORT_PCR_IRQC(10) |PORT_PCR_MUX(1)|PORT_PCR_PS_MASK |PORT_PCR_PE_MASK ; PTB->PDDR &=~(1<<5); NVIC_EnableIRQ(PORTB_IRQn);//使能中断// /*systick*/ // SysTick->LOAD = 0xFE1111; // SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk| SysTick_CTRL_TICKINT_Msk ; /*PIT*/ // uint8_t irq = 68;// NVIC->ICPR[2] = 1<<(irq%32);// NVIC->ISER[2] = 1<<(irq%32);//打开pit定时中断 NVIC_EnableIRQ(PIT0_IRQn); SIM->SCGC6 |=SIM_SCGC6_PIT_MASK ; PIT->MCR =0x00; PIT->CHANNEL[0].LDVAL =50000000;//0x013FFA10;时钟是bus clock PIT->CHANNEL[0].TCTRL |= PIT_TCTRL_TEN_MASK|PIT_TCTRL_TIE_MASK; UART4_init(115200); while(1) { send_str(str); Delay_Lptmer(1000);//跟中断在一起有问题,会让GPIO中断停止 } // return 0;}
等忙完这阵子,就继续把其他模块补充上去。若上述中有什么错的,希望指出,共同进步!
0 0
- 再看K60——寄存器配置
- K60学习笔记4——配置工程
- K60(Cortex-M4)开源开发探索(六)—— OpenOCD的配置
- K60(Cortex-M4)开源开发探索(七)—— kermit的安装与配置
- K60笔记2——内存空间分布
- K60学习笔记3——Linker
- K60(Cortex-M4)开源开发探索(一)—— K60简介
- Feescale K60开发笔记16: k60 bootloader应用程序的配置
- K60学习笔记1——kinetis 启动分析
- K60学习笔记5——Jlink解锁
- 再看数据结构之——快速排序
- XML(2)——再看spring配置文件
- 再看数据库——(3)触发器
- 再看数据库——(2)视图
- 再看数据库——(4)事务
- 再看数据库——(6)连接
- 再看数据库——(7)游标
- 再看设计模式——观察者模式
- 写点东西
- 数字类型和字符串类型的相互转换
- 关于无向图直径的一些思考
- 51倒计时程序
- java字符串和十六进制字符串互转
- 再看K60——寄存器配置
- HTTP状态码解释
- 关于android:sharedUserId="android.uid.system"这个系统级权限
- Ubuntu Server如何配置SFTP(建立用户监狱)
- iOS 页面切换控制
- Keep Tinking,Find Beauty
- [转]java.lang.instrument 学习(一)
- 80386与8086在寄存器与寻址方式上的区别
- 1007 正整数分组 dp