再看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