Forums

SPI PDC AIC中断

开始于 游戏玩家z267 2008年1月23日
我需要将aic与pdc一起使用时需要一些帮助。您如何启动它。这
是我设置的方式。

//在传输结束时配置中断
AT91F_SPI_EnableIt(pSPI,AT91C_SPI_ENDTX);

//为SPI中断配置AIC
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,AT91C_ID_SPI0,
AT91C_AIC_PRIOR_HIGHEST,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,SPI0_Handler);

//在中断控制器上启用中断
AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_SPI0);
你好,

您是否设置了外围时钟(PMC_PCER)?

埃里克
- - - 原始信息 - - -
From: gamerz267
To: A...
发送:2008年1月24日,星期四,凌晨3:28
主题:[AT91SAM] SPI PDC AIC Interupt
我需要将aic与pdc一起使用时需要一些帮助。您如何启动它。这
is how i set it up.

//在传输结束时配置中断
AT91F_SPI_EnableIt(pSPI,AT91C_SPI_ENDTX);

//为SPI中断配置AIC
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,AT91C_ID_SPI0,
AT91C_AIC_PRIOR_HIGHEST,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,SPI0_Handler);

//在中断控制器上启用中断
AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_SPI0);
你是这个意思吗

AT91F_PMC_EnablePeriphClock(
AT91C_BASE_PMC,// PIO控制器基地址
((unsigned int) 1 << AT91C_ID_SPI0));

//来自lib_AT91SAM7X256.h
无效AT91F_PMC_EnablePeriphClock(
AT91PS_PMC pPMC,// \ arg指向PMC控制器的指针
unsigned int periphIds)// \ arg外围设备的ID
{
pPMC->PMC_PCER =外围设备;
}

---在A ...中,“埃里克·帕斯奎尔”写道:
>
> Hi,
>
>您是否设置了外围时钟(PMC_PCER)?
>
> Eric.
> - - - 原始信息 - - -
> From: gamerz267
> To: A...
>发送:2008年1月24日,星期四,凌晨3:28
>主题:[AT91SAM] SPI PDC AIC Interupt
>我需要将aic与pdc一起使用时需要一些帮助。您如何启动它。这
>是我设置的方式。
>
>//在传输结束时配置中断
>AT91F_SPI_EnableIt(pSPI,AT91C_SPI_ENDTX);
>
>//为SPI中断配置AIC
>AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,AT91C_ID_SPI0,
>AT91C_AIC_PRIOR_HIGHEST,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
SPI0_Handler);
>
>//在中断控制器上启用中断
>AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_SPI0);
>
是的。
您必须为每个外设设置内部MCK时钟,通过 默认为低消耗。

而且,当然,您必须设置其他参数,例如位数,传输 速率,取决于您的应用程序。

埃里克·帕斯奎尔
- - - 原始信息 - - -
From: gamerz267
To: A...
发送:2008年1月24日,星期四,11:24 PM
主题:[AT91SAM]回复:spi pdc aic interupt
Do you mean this

AT91F_PMC_EnablePeriphClock(
AT91C_BASE_PMC,// PIO控制器基地址
((unsigned int) 1 << AT91C_ID_SPI0));

//来自lib_AT91SAM7X256.h
无效AT91F_PMC_EnablePeriphClock(
AT91PS_PMC pPMC,// \ arg指向PMC控制器的指针
unsigned int periphIds)// \ arg外围设备的ID
{
pPMC->PMC_PCER =外围设备;
}

---在A ...中,“埃里克·帕斯奎尔”写道:
>
> Hi,
>
>您是否设置了外围时钟(PMC_PCER)?
>
> Eric.
>
>
> - - - 原始信息 - - -
> From: gamerz267
> To: A...
>发送:2008年1月24日,星期四,凌晨3:28
>主题:[AT91SAM] SPI PDC AIC Interupt
>
>
>我需要将aic与pdc一起使用时需要一些帮助。您如何启动它。这
> is how i set it up.
>
>//在传输结束时配置中断
>AT91F_SPI_EnableIt(pSPI,AT91C_SPI_ENDTX);
>
>//为SPI中断配置AIC
>AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,AT91C_ID_SPI0,
>AT91C_AIC_PRIOR_HIGHEST,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
SPI0_Handler);
>
>//在中断控制器上启用中断
>AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_SPI0);
>
好的,时钟已经启用。我也必须为aic启用它吗?
如果是这样,我该怎么做?
---在A ...中,“埃里克·帕斯奎尔”写道:
>
> Yes.
>您必须为每个外设设置内部MCK时钟,
默认情况下断开连接以降低功耗。
>
>而且,当然,您必须设置其他参数,例如
位,传输速率……取决于您的应用。
>
> Eric Pasquier
> - - - 原始信息 - - -
> From: gamerz267
> To: A...
>发送:2008年1月24日,星期四,11:24 PM
>主题:[AT91SAM]回复:spi pdc aic interupt
> Do you mean this
>
>AT91F_PMC_EnablePeriphClock(
>AT91C_BASE_PMC,// PIO控制器基地址
>((无符号整数)1<< AT91C_ID_SPI0));
>
>//来自lib_AT91SAM7X256.h
>无效AT91F_PMC_EnablePeriphClock(
>AT91PS_PMC pPMC,// \ arg指向PMC控制器的指针
>unsigned int periphIds)// \ arg外围设备的ID
> {
> pPMC->PMC_PCER =外围设备;
> }
>
>---在A ...中,“埃里克·帕斯奎尔”写道:
> >
> > Hi,
> >
> >您是否设置了外围时钟(PMC_PCER)?
> >
> > Eric.
> >
> >
> > - - - 原始信息 - - -
> > From: gamerz267
> > To: A...
> >发送:2008年1月24日,星期四,凌晨3:28
> >主题:[AT91SAM] SPI PDC AIC Interupt
> >
> >
> >我需要将aic与pdc一起使用时需要一些帮助。你如何发起
它。这
> > is how i set it up.
> >
> >//在传输结束时配置中断
> >AT91F_SPI_EnableIt(pSPI,AT91C_SPI_ENDTX);
> >
> >//为SPI中断配置AIC
> >AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,AT91C_ID_SPI0,
> >AT91C_AIC_PRIOR_HIGHEST,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
> SPI0_Handler);
> >
> >//在中断控制器上启用中断
> >AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_SPI0);
>
有一些特殊的技巧可以使中断与spi一起工作。我的
代码不会引起中断。难道我做错了什么??

AT91F_PMC_EnablePeriphClock(
AT91C_BASE_PMC,// PIO控制器基地址
((unsigned int) 1 << AT91C_ID_SPI0));

// Open PIO for SPI0
// AT91F_SPI0_CfgPIO();
AT91F_PIO_CfgPeriph(
AT91C_BASE_PIOA,// PIO控制器基地址
((无符号整数)AT91C_PA15_SPI0_NPCS3)|
((无符号整数)AT91C_PA16_SPI0_MISO)|
((无符号整数)AT91C_PA17_SPI0_MOSI)|
[[unsigned int)AT91C_PA18_SPI0_SPCK),//外围设备A
0); // Peripheral B

/ * 2。在AIC * /中为SPI0配置中断
// AT91F_AIC_DisableIt(AT91C_BASE_AIC,AT91C_ID_SPI0);
//为SPI中断配置AIC
AT91F_AIC_ConfigureIt(
AT91C_BASE_AIC,
AT91C_ID_SPI0,
AT91C_AIC_PRIOR_HIGHEST,
AT91C_AIC_SRCTYPE_HIGH_LEVEL,
AT91F_SPI0_Interrupt_handler);
//在中断控制器上启用中断
AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_SPI0);

/ * 3。配置SPI * /
// Reset SPI
// AT91F_SPI_Reset(AT91C_BASE_SPI0);

//使用cs在主模式下配置SPI
AT91F_SPI_CfgMode(AT91C_BASE_SPI0,SPI_MODE);

// Configure CSx
AT91F_SPI_CfgCs(AT91C_BASE_SPI0,3,SPI_NPCS3_CONFIG); // CS3

//在传输结束时配置中断
AT91F_SPI_EnableIt(AT91C_BASE_SPI0,AT91C_SPI_TDRE);

// SPI_Enable
AT91F_SPI_Enable(AT91C_BASE_SPI0);

---在A ...中,“ gamerz267”写道:
>
>好的,时钟已经启用。我是否必须为aic启用它
也?
>如果是这样,我该怎么做?
>---在A ...中,“埃里克·帕斯奎尔”写道:
> >
> > Yes.
> >您必须为每个外设设置内部MCK时钟,
>默认情况下断开连接以降低功耗。
> >
> >而且,当然,您必须设置其他参数,例如
>位,传输速率……取决于您的应用。
> >
> > Eric Pasquier
> >
> >
> > - - - 原始信息 - - -
> > From: gamerz267
> > To: A...
> >发送:2008年1月24日,星期四,11:24 PM
> >主题:[AT91SAM]回复:spi pdc aic interupt
> >
> >
> > Do you mean this
> >
> >AT91F_PMC_EnablePeriphClock(
> >AT91C_BASE_PMC,// PIO控制器基地址
> >((无符号整数)1<< AT91C_ID_SPI0));
> >
> >//来自lib_AT91SAM7X256.h
> >无效AT91F_PMC_EnablePeriphClock(
> >AT91PS_PMC pPMC,// \ arg指向PMC控制器的指针
> >unsigned int periphIds)// \ arg外围设备的ID
> > {
> > pPMC->PMC_PCER =外围设备;
> > }
> >
> >---在A ...中,“埃里克·帕斯奎尔”写道:
> > >
> > > Hi,
> > >
> > >您是否设置了外围时钟(PMC_PCER)?
> > >
> > > Eric.
> > >
> > >
> > > - - - 原始信息 - - -
> > > From: gamerz267
> > > To: A...
> > >发送:2008年1月24日,星期四,凌晨3:28
> > >主题:[AT91SAM] SPI PDC AIC Interupt
> > >
> > >
> > >我需要将aic与pdc一起使用时需要一些帮助。你如何发起
> it. This
> > > is how i set it up.
> > >
> > >//在传输结束时配置中断
> > >AT91F_SPI_EnableIt(pSPI,AT91C_SPI_ENDTX);
> > >
> > >//为SPI中断配置AIC
> > >AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,AT91C_ID_SPI0,
> > >AT91C_AIC_PRIOR_HIGHEST,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
> > SPI0_Handler);
> > >
> > >//在中断控制器上启用中断
> > >AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_SPI0);
> > >
>
我可以在启动文件中将它初始化吗?

像这样的东西?我的启动文件确实有这个...

/* Initialize AIC
****************/
AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF;
AT91C_BASE_AIC->AIC_SVR [0] =(unsigned int)defaultFiqHandler;
for (i = 1; i < 31; i++) {

AT91C_BASE_AIC->AIC_SVR [i] =(无符号int)defaultIrqHandler;
}
AT91C_BASE_AIC->AIC_SPU =(unsigned int)defaultSpuriousHandler;

//取消嵌套中断
for (i = 0; i < 8 ; i++) {

AT91C_BASE_AIC->AIC_EOICR = 0;
}

---在A ...中,“ gamerz267”写道:
>
>我需要将aic与pdc一起使用时需要一些帮助。您如何启动它。这
> is how i set it up.
>
>//在传输结束时配置中断
>AT91F_SPI_EnableIt(pSPI,AT91C_SPI_ENDTX);
>
>//为SPI中断配置AIC
>AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,AT91C_ID_SPI0,
>AT91C_AIC_PRIOR_HIGHEST,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
SPI0_Handler);
>
>//在中断控制器上启用中断
>AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_SPI0);
>