C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5502|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% u9 y4 a7 H$ B9 i8 i
main文件:
  q; n/ `. `) cinterrupt void interrupt4(void)  
* e# B5 v/ q* t# ^3 l{
8 q& C8 x8 h7 N5 M  e2 i  Uint32 sample;
, Q8 _, i  u# A0 s  g, o* F; `- u: @9 P; o* c. T1 V
  sample = input_sample(); // read L + R samples from ADC
% J6 Y+ r7 L4 ]1 d' J  s- H! B' y/ x  output_sample(sample);   // write L + R samples to DAC
7 `1 f: L6 U7 W* e$ P  return;4 b( ]; A/ p& ~6 L, e/ {
}
& v7 h" \) f' r+ U8 w7 ?/ z; c! P5 y7 v7 F
int main( void )0 N: c/ ^5 |9 A/ K" x
{
0 |. d% X2 w6 L" @  C1 Y' `+ G/ `) p  d. w  V- M
    /* Initialize BSL */
" l% X/ p0 b0 P  T- b    EVMC6747_init( );& _- V1 T7 o- R+ Z$ ]. ^( W
        /* Call evmc6747_intr function */. ?! M- u9 Q! Q/ V1 v
    aic3106_init( );
' w  b2 v6 I1 }: @: D        while(1);2 q/ X3 Y( _6 l  L
}
) z* Z+ \; R" N. |& u
1 v' O6 M+ z; h. h+ g  ?
7 j7 t5 h5 Y/ x/ S( V; zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 B5 l; K" G, Q5 e  l
/* Initialize MCASP1 */
: i2 {7 n' x9 w  `5 r" R: ~    mcasp = &MCASP_MODULE_1;
7 l5 z7 S6 W+ x+ b2 t' Y    mcasp->regs->GBLCTL  = 0;       // Reset) y/ Y# q3 z6 [& k
    mcasp->regs->RGBLCTL = 0;       // Reset RX
% C) C  h/ i/ d; h7 N    mcasp->regs->XGBLCTL = 0;       // Reset TX  C5 B( \% b% Z' _. w/ ?
    mcasp->regs->PWRDEMU = 1;       // Free-running  K" H- n6 |8 K" J7 N. N( C
   // configure McASP0 receive registers
" [; R. B+ I  m0 L+ L' f    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
$ s9 e+ `0 O0 w" Y+ y    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% ^& d0 `4 }  i    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 e2 d! d9 Z& C5 S$ b% [% Q- E- K
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ I) B9 o' u  G" b
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 l1 t( G# @1 R' E- K4 h7 Q* n    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 ^" I5 I' [$ b+ @& t+ V
    mcasp->regs->RINTCTL    = 0x00000000; // Not used( M9 C3 ?+ N1 S& Z% g! y
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! W6 g' x: G- _
" e. l, i2 D, @2 U# E+ N
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
1 J) u3 L3 l: P$ L( ?    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% M$ e) x* w$ N% X    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
9 z7 g; t) m& `6 z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
9 g  r8 H/ \9 v    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
+ Z% t5 ]8 S! }    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1: Z& r* _2 t  V
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 }1 L$ K& t! \, h: v
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 k- N. q1 c9 {$ d0 ]* J
2 _8 h3 A" I: f: G7 Y! {
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN& X7 D1 T4 }, U. c0 V2 f
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT& Y( ?3 u5 S0 D) W
    mcasp->regs->PFUNC      = 0;          // All MCASPs4 \- C1 f! ]7 y  U
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 }* P: x  W$ m4 d
" \8 d$ q2 A$ L) P    mcasp->regs->DITCTL     = 0x00000000; // Not used/ r! w. V7 d5 i% @8 v6 n/ Z
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) K3 y8 K% I5 n    mcasp->regs->AMUTE      = 0x00000000; // Not used8 Y% u- l: o$ |9 p  l; u

# q+ S# s4 K+ C6 ?/* Starting sections of the McASP*/
7 @- Z- |8 {0 H. [: D: {6 P1 t) y    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 3 H4 u8 T( W( }% `$ A) `: l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  5 C0 ?& _" k. W" Q/ T2 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 P5 t4 e) G3 y6 h  A+ k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 F! ~5 B9 Y  t; g
9 u; ]  I/ a% h2 O' e, k
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , }( |( N, J8 v- H. a( [/ V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- Q$ a$ s% F6 W: n2 w) F
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 z: z3 r, j/ L) k$ M) t# S5 O" I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );) `2 \$ G3 o% S$ b5 n: v+ r* p

0 ^- o- j4 o+ k4 t+ ]% q% L    mcasp->regs->XSTAT = 0x0000ffff;
$ h4 l# v% J/ O* m    mcasp->regs->RSTAT = 0x0000ffff;
4 K/ L4 d+ R4 c8 ^* \. P- L/ e1 `' p2 ?) ~+ T2 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ v: t: `- u7 J! C' L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ n" `. R% C, l; E6 b% L4 n- j3 a    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
  D+ H7 U2 Z) ]$ D- r# l# h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 f* l7 X% P' i9 H, O; _6 d. J" Y/ k
: X5 _) b6 Q* d8 k% A6 ]. S
    /* Write a 0, so that no underrun occurs after releasing the state machine */1 o2 Q) u0 [" X7 p( ~
    mcasp->regs->XBUF5 = 0;% A! a! e# r* {& U, y
    mcasp->regs->RBUF0 = 0;
5 e. r& H, @' R9 v1 O- {7 z% H4 U7 S5 M1 U! U% M4 P  E
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; \4 c4 e8 X4 @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: v( q% A+ u) L8 y    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 ]- I9 e' M7 S5 K& |2 [. k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) b/ J! w/ {3 g5 _& o% ]$ d& X
& y1 e( z9 Q$ _% a& `4 n    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 z, a6 t1 V4 u, e/ o" v9 L; \, Z* ?6 ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
9 C7 D' ?/ Z: D  E    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 L3 ~) L3 X( }. S0 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 L, I9 ?1 |' x7 a
* s' z" F) `# g. e# I- c
    CSR = 0x0000;4 |4 X! Y+ g, M) q1 g) E9 ~* r
    INTC_INTMUX1 = 0x3d;& Y% R7 H; H% N) a' l' ?
    ISTP = (unsigned int)vectors;
( D4 J4 e" c1 t$ ]/ e9 ]7 z9 }    ICR = 0xFFF0;  
) f3 Q: W  I2 }2 @    IER |= 0x12;  & t* ~3 G" T. V2 `/ i& R2 C. v
    CSR |= 0x01;  1 y( v) i( e) [: G5 d7 `  I* A

/ X) r4 m1 S) T6 U
, G4 _2 z9 X  k5 g! v" a& q8 r( Z9 U4 k9 D+ T
还有就是两个输入输出函数:
5 A6 }, J/ T3 h. ~  F4 l- qvoid output_sample(Int32 out_data)
+ X+ P. [, E7 U{
1 Y. B: n' \/ ^/ y' u  AIC31_data.uint = out_data;  : L2 q# v! ]4 d, k0 V, ^
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
( ^: _& Q" b& ], a7 G3 i}
# \. N( y9 j' P8 v$ r
& n- m* ^, J) h# }1 Q6 I: [' M4 wInt32 input_sample(void)0 |  u& I+ C. X' e
{  6 ]$ g8 i5 V0 Y" x
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
) Z  n# D5 _0 S- j( A3 b  return (AIC31_data.uint);3 k! [8 T' K- e9 I* q6 c
}
: n" u  L" Q" D0 x, ~
9 q. i1 G' ?+ l& s( ]8 U& x8 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-11-18 03:11 , Processed in 0.042768 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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