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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 D/ ?, I  z6 y! f: d
main文件:- S+ L" F$ @2 @) n1 S, g( e: p# n
interrupt void interrupt4(void)  
$ [* C: @: V) `3 E( @. ~; ^& Z{
+ o/ T" i. b- s# |/ [) i+ d  Uint32 sample;0 o5 A4 G' n; \
3 I) C% ?* K* m' J
  sample = input_sample(); // read L + R samples from ADC
# U- Q' o3 _: V( ~' S  output_sample(sample);   // write L + R samples to DAC
8 f1 z' G" I9 R9 M% E2 [0 \- q& n7 E& N  return;9 T2 G) |5 `0 O' p2 ?
}3 o' h( A. `. ~# k; t
( Z1 D, K: o+ |) L
int main( void )
2 Z# Y7 o3 q4 p, _/ p{
/ F6 H' X& j' @6 n/ @" f
! w: w$ R7 z0 V6 [) i    /* Initialize BSL */
, r  N4 V! r8 J    EVMC6747_init( );% o8 Z& ]3 Y+ z9 R
        /* Call evmc6747_intr function */
+ e$ z; l) z/ n3 _    aic3106_init( );# e6 N% A/ B3 p4 b. q
        while(1);: X, l3 P7 o. y# W
}
$ i( q8 p3 c" J9 p  O/ @8 ^2 ?3 Y( n8 L! ?- T  V/ }8 C" r/ I/ g7 f% t

8 ?( u7 u1 l- ~: c  ]  ~7 Saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( z) P% d5 b1 r# a8 K. k
/* Initialize MCASP1 */$ _* g# y0 u8 y9 W
    mcasp = &MCASP_MODULE_1;
, r) Z( J( v4 T0 f2 T    mcasp->regs->GBLCTL  = 0;       // Reset
! S* c9 u6 c7 ?( P9 s/ \- t! Z% e5 O    mcasp->regs->RGBLCTL = 0;       // Reset RX/ N$ v  r" Y2 U: g2 y. R5 X7 A
    mcasp->regs->XGBLCTL = 0;       // Reset TX
2 B6 ?& G" m3 i, s4 ], R" K    mcasp->regs->PWRDEMU = 1;       // Free-running
* S, n. A+ s0 t2 ?$ ^   // configure McASP0 receive registers
4 P( g" ~  r$ t7 X) E  y3 x    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used, G% S! d! d0 ]+ q7 Q$ N3 T
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ h& @  S3 ~1 J" [& \    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ F* `# I4 d* d3 |- M- z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 S* d: O0 T& m; `    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 w% ^" W/ V3 G! U1 z
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,10 H0 x+ i9 Y" ]  J; z7 H; D
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
$ L* Z( ~5 A" a' v8 d    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# x0 T6 U! ]. G3 b/ W( }
3 `3 M4 q% Z8 H# f
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 \4 @1 t, I  M7 D* V8 V    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( _  L/ u+ K7 a* O    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 }/ N4 z$ k: ^5 ?! y5 z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
$ H7 a, A. C1 F/ b5 u) ~, }    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" x+ r; K6 V  a5 K9 N1 }( g+ C    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1% L6 S, ~% J" P, j( w
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 q# `/ p4 q$ \7 E$ O8 l5 |" s3 J! V7 \
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ D0 E- U' [: F5 |" H. T$ ^4 `
& l1 l+ d% W( I
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN4 P. v3 {$ L" O! Z6 b
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
8 L- O* U0 W4 c    mcasp->regs->PFUNC      = 0;          // All MCASPs' s$ _2 G4 e0 B' v* L0 Q* U
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ I" w  I4 J' r! s6 j7 N
4 w* f' J  a: ]7 z: S5 f    mcasp->regs->DITCTL     = 0x00000000; // Not used8 G% S! X  W  w- ~* E! E
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
8 q6 r3 V6 B5 I0 r% X: \2 Z    mcasp->regs->AMUTE      = 0x00000000; // Not used
1 u6 B3 {; A2 ?; ?+ O/ [" U
9 q6 f$ W- f" Q# }5 d* ?/ H" W, I* I/* Starting sections of the McASP*/
0 C: H5 @4 P2 E    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , {- V5 n; B5 t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 a; A2 R+ _+ Z; }( L8 W- _6 ^' r    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! o3 A) [! Z3 v1 w* h& j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, k7 }9 P) \' J8 K8 w
' @' `7 H1 l2 j  y3 ^5 f/ M+ Z: n    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
9 g/ U, d! ]) K9 c* u  s3 w. N- y6 }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' N# r. H7 s  m6 W: D. O8 \
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : W' s8 G4 g( `* j4 q. c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 L) J* _0 C& N( x4 Y# B: Z" D8 S* F1 Q. \4 q" p* l
    mcasp->regs->XSTAT = 0x0000ffff;
1 b9 N4 G. W1 d* w. P% M0 n6 o    mcasp->regs->RSTAT = 0x0000ffff;
* w+ Q$ L( w* a" y- k1 {+ |2 x& S) b5 H
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' A) b; A$ n9 W. _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 Q3 D5 G; o7 C8 L2 o/ ~    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * P; d% g3 y7 V# I4 E! K$ O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 x4 m7 I; J, r% G( p5 ?
! J3 o1 ~- g6 c4 t- _& u    /* Write a 0, so that no underrun occurs after releasing the state machine */
# P' v( k( Q- H' E. }    mcasp->regs->XBUF5 = 0;
% R. x4 Y; C8 `3 b    mcasp->regs->RBUF0 = 0;3 c9 W  z1 q+ L+ F- m
: G" a; [$ y$ ?3 A
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ E- j' [: j6 t7 I8 Y% M7 e2 ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# M& C! O7 y/ H* t6 f% m# X5 @
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 A2 r3 \. Y% w8 E# k- t+ E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' `2 m: v0 r; I2 K
' l0 I* }8 o. C  |    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * A, Z3 |3 J: R$ i  ?5 h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  t3 Y6 J) A  T1 S4 a2 g9 d    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 R5 O6 _$ h; U3 Z& k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- a+ j+ a, a$ G) V  Q5 a  \; R3 L

8 q' y- |: ]% R( D) B    CSR = 0x0000;
5 a/ I# q: M8 w# n    INTC_INTMUX1 = 0x3d;+ V0 j8 ^' \* f! A
    ISTP = (unsigned int)vectors;
% ]) W  L0 Q# G4 `# o; T: p    ICR = 0xFFF0;  
) K, p# o/ t. W! q    IER |= 0x12;  : W5 F0 ?9 h, |3 t* V) r
    CSR |= 0x01;  
# v/ _* @6 m) g9 z' C, P( L/ u
' A6 U. L2 q+ l4 Z$ ^3 W+ V! d! ]$ o- `: W1 d7 s
3 r6 a. u  V3 l
还有就是两个输入输出函数:
) c2 k1 Q' G8 V- |3 Q! q7 c/ b0 i) Nvoid output_sample(Int32 out_data)) G6 Q2 v( v1 H* P4 q0 [4 H: V
{
' J7 B7 U% g2 U! R  AIC31_data.uint = out_data;  / {+ K0 K0 j4 u/ X6 g% o! ]+ m
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
& a$ o+ D( C; q( v! ?}
! |2 o! W3 z6 \" `
8 X5 M( v, p! q- S6 t4 rInt32 input_sample(void)
  ~. j; X2 |( Q; i# [{  
0 f' q3 _; \. ]5 ^  AIC31_data.uint = MCASP1_RBUF0_32BIT;
  j! q2 r& m4 f  return (AIC31_data.uint);9 L0 \) T/ P( D2 _% a
}7 s3 n. ~' c! Z' K8 T5 f5 x# ]% w
! D1 h  R' ^, X; v2 r5 k
分享到:  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-28 07:50 , Processed in 0.039296 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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