智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3223|回复: 4
打印 上一主题 下一主题

pit中断《k10》

[复制链接]

4

主题

109

帖子

0

精华

高级会员

Rank: 4

积分
971
威望
465
贡献
262
兑换币
288
注册时间
2012-11-3
在线时间
122 小时
跳转到指定楼层
1#
发表于 2012-11-8 18:40:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*
* main implementation: use this 'C' sample to create your own application
*
*/



#include <stdio.h>

#include "derivative.h" /* include peripheral declarations */
#define GPIO_PIN(x)              (((1)<<(x & GPIO_PIN_MASK)))
#define GPIO_PIN_MASK            0x1Fu

#define PORTA PTA_BASE_PTR
#define PORTB PTB_BASE_PTR
#define PORTC PTC_BASE_PTR
#define PORTD PTD_BASE_PTR
#define PORTE PTE_BASE_PTR
typedef unsigned char                uint8;  /*  8 bits */
typedef unsigned short int        uint16; /* 16 bits */
typedef unsigned long int        uint32; /* 32 bits */

typedef char                            int8;   /*  8 bits */
typedef short int                int16;  /* 16 bits */
typedef int                            int32;  /* 32 bits */


void PIT_Init()
{
    SIM_SCGC6 |= 0x00800000;
    PIT_MCR = 0x00;
    PIT_TCTRL0 = 0x00;
    PIT_TFLG0 = 0x01;
    PIT_LDVAL0 = 10000000;
    NVICISER2 |= 0x10;//使能中断NVICISERn=m,其中n=84/32,m=84%32
    PIT_TCTRL0 = 0x03;

    PIT_TCTRL1 = 0x00;
    PIT_TFLG1 = 0x01;
    PIT_LDVAL1 = 20000000;
    NVICISER2 |= 0x20;//使能中断NVICISERn=m,其中n=85/32,m=85%32, NVICICER0 = 1 << (irq%32);
    PIT_TCTRL1 = 0x03;
    PIT_TCTRL2 = 0x00;
    PIT_TFLG2 = 0x01;
    PIT_LDVAL2 = 30000000;
    NVICISER2 |= 0x40;//使能中断NVICISERn=m,其中n=86/32,m=86%32
    PIT_TCTRL2 = 0x03;
    PIT_TCTRL3 = 0x00;
    PIT_TFLG3 = 0x01;
    PIT_LDVAL3 = 40000000;
    NVICISER2 |= 0x80;//使能中断NVICISERn=m,其中n=87/32,m=87%32   
    PIT_TCTRL3 = 0x03;
}



void gpio_init (GPIO_MemMapPtr port, int32 index, int32 dir, int32 data)//
{
        PORT_MemMapPtr p;
        /* Turn on all port clocks */
        //SIM_SCGC5 = SIM_SCGC5_PORTA_MASK | SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTD_MASK | SIM_SCGC5_PORTE_MASK;
        switch((uint32)port)
        {
        case 0x400FF000u:
                p = PORTA_BASE_PTR;
                SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;   //开PORTA使能时钟
                break;
        case 0x400FF040u:
                p = PORTB_BASE_PTR;
                SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK;   //开PORTB使能时钟
                break;
        case 0x400FF080u:
                p = PORTC_BASE_PTR;
                SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK;   //开PORTC使能时钟
                break;
        case 0x400FF0C0u:
                p = PORTD_BASE_PTR; //((GPIO_MemMapPtr)0x400FF0C0u)
                SIM_SCGC5 |= SIM_SCGC5_PORTD_MASK;   //开PORTD使能时钟
                break;
        case 0x400FF100u:
                p = PORTE_BASE_PTR;
                SIM_SCGC5 |= SIM_SCGC5_PORTE_MASK;   //开PORTE使能时钟
                break;
        default:
                break;
        }
        PORT_PCR_REG(p,index) = (0|PORT_PCR_MUX(1));  //配置PORT口德MUX为为GPIO模式
        if(dir == 1)                                //output
        {
                GPIO_PDDR_REG(port) |= (1<<index);      //配置PORTn口的第index引脚为输出
                if(data == 1)                           //设置输出值
                        GPIO_PDOR_REG(port) |= (1<<index);  //端口输出值为1  
                else
                        GPIO_PDOR_REG(port) &= ~(1<<index); //端口输出值为0
        }
        else                     //设置为输入口   
        {
                GPIO_PDDR_REG(port) &= ~(1<<index);
                if(data == 1)                           //上拉电阻
                        PORT_PCR_REG(p,index) |= PORT_PCR_PS_MASK;
                else               //下拉电阻
                        PORT_PCR_REG(p,index) &= ~(PORT_PCR_PS_MASK);
                        PORT_PCR_REG(p,index) |= PORT_PCR_PE_MASK;
                        
        }
        //GPIO_PDDR_PDD();
        //GPIOD_PDDR;
}



* 函数名:gpio_reverse
* 功     能:改变引脚状态
* 参     数: port:端口名
*         index:指定端口引脚
* 返     回:无
* 说     明:无
************************************************/
void gpio_reverse(GPIO_MemMapPtr port, int32 index)
{
        GPIO_PTOR_REG(port) |= (1<<index);    //PTOR,toggle output,输出翻转
}



int main(void)
{

        PIT_Init();
        gpio_init(PORTD,4,1,1);  
        while(1)
        {;}
       
       
}
void pit0_isr(void)
{
        //uint32 c;
        //PIT_TCTRL0 &= ~(PIT_TCTRL_TEN_MASK|PIT_TCTRL_TIE_MASK);//定时器中断使能   定时器使能
        PIT_TFLG0=PIT_TFLG_TIF_MASK;//标志位清除
        //GPIOA_PTOR=0X0003E000;//
        //c=PIT_CVAL0;
        GPIOD_PDDR &= ~GPIO_PDDR_PDD(GPIO_PIN(1));
        PIT_LDVAL0 = 5000000;              //设置时间   time*系统时钟*1000    50ms
        gpio_reverse (PTD_BASE_PTR,4);

       
}       
在向量表中修改中断irq名称的说
我是新手,学K10      




4

主题

109

帖子

0

精华

高级会员

Rank: 4

积分
971
威望
465
贡献
262
兑换币
288
注册时间
2012-11-3
在线时间
122 小时
2#
 楼主| 发表于 2012-11-8 18:42:13 | 只看该作者
  //设置时间   time*系统时钟*1000    50ms
这个程序默认系统时钟,未倍频,50ms估计不准
回复 支持 反对

使用道具 举报

27

主题

615

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3822

优秀会员奖章活跃会员奖章在线王奖章

威望
1583
贡献
697
兑换币
394
注册时间
2011-11-25
在线时间
771 小时
3#
发表于 2012-11-8 20:20:55 | 只看该作者
在startup.c文件中有中断向量表,找到对应中断源的中断号,并修改中断服务函数名称。
回复 支持 反对

使用道具 举报

68

主题

439

帖子

2

精华

版主

Rank: 9Rank: 9Rank: 9

积分
4618
QQ
威望
2342
贡献
1290
兑换币
1175
注册时间
2009-12-24
在线时间
493 小时
4#
发表于 2013-8-25 10:31:35 | 只看该作者
回复 支持 反对

使用道具 举报

68

主题

439

帖子

2

精华

版主

Rank: 9Rank: 9Rank: 9

积分
4618
QQ
威望
2342
贡献
1290
兑换币
1175
注册时间
2009-12-24
在线时间
493 小时
5#
发表于 2013-8-25 10:32:09 | 只看该作者
要开PIT内部的中断和 NVIC中断,具体看这里http://www.znczz.com/thread-123546-1-1.html
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-29 18:03 , Processed in 0.043986 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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