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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 F3 o( |7 e# N3 Gmain文件:
6 w& Y- G) s4 v# y' J: h$ S9 g* b% xinterrupt void interrupt4(void)  
/ t$ P; n2 H/ z; u{
* E8 k1 w( I7 w- N  Uint32 sample;" Q5 t9 y9 R3 C& a! c2 V

" L8 u% ^% D6 E7 T9 t- c4 x  sample = input_sample(); // read L + R samples from ADC: D: ~. i, p+ p
  output_sample(sample);   // write L + R samples to DAC
+ C0 S7 o- v0 B( n+ b, R& q  return;5 ]' U, O, W% f/ E& m
}% d2 ], k$ P9 `: F' B
: D- _6 y; Q; [: a% ~1 W% S7 N3 }' q5 Y
int main( void )
( q5 H5 g! Q( d{
. R. z" w* X  ]: h# E5 s+ i) U7 D
    /* Initialize BSL */# _/ ^! w1 q$ i  R' b4 L
    EVMC6747_init( );
" c9 j4 t, a: C% }8 z3 e9 Z5 Y        /* Call evmc6747_intr function */$ c9 `' Y5 A/ P- z1 d! q1 i# Z
    aic3106_init( );
& x( V& p3 i9 Q) I" N9 d+ n        while(1);2 ?* j. g$ C7 {+ ~1 f) a
}
0 k  y. w  [7 r0 ?) l7 Y. L9 B9 h  \5 z( P
  ~6 @9 O6 ^$ u& f4 z2 d* i" m
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题* X: i: T6 s- H
/* Initialize MCASP1 */$ g: X- }& L; E# _0 \
    mcasp = &MCASP_MODULE_1;0 W! G( }# K  z# Y
    mcasp->regs->GBLCTL  = 0;       // Reset
& V) I& a4 |( q, F: l( `; ~* U    mcasp->regs->RGBLCTL = 0;       // Reset RX% [& d* \  e+ E3 j' w# ?
    mcasp->regs->XGBLCTL = 0;       // Reset TX
0 a4 `# g4 R# o2 v" `# ~9 ]    mcasp->regs->PWRDEMU = 1;       // Free-running
6 x0 M! j8 L! a   // configure McASP0 receive registers
4 s! l: A2 f" F- O  [) \! H$ J    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used! n; \) P4 R6 ?+ L( \( L) Q
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- I+ t! U) M7 {
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; N" E* J3 O. m
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 `+ c; q) m, ?0 v5 W    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 y) y0 h- m* W' l4 U
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1( b* D/ D2 _0 \# X! H& w
    mcasp->regs->RINTCTL    = 0x00000000; // Not used( m+ g9 `2 _1 y6 V0 a
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: c: b3 S( O. `; n9 y- T+ @4 h
% V% z4 ]* i/ u    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
7 ]+ |$ \; q% i5 j9 |  D    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) W3 S* o% G5 D9 i% |2 Q0 {    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 H* S- g5 A: m+ j( b$ |/ _) e: {/ Y    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ q$ Y4 p  f  V# _8 R    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 N) X: L. N( u2 b0 j( g) L
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, o- q. b9 {3 i; F3 v, K
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 m5 W* s9 d) f( }! d' @# L    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. D9 n/ K; L: j) a
. {2 Z' F# R" b3 f+ p
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( |% q, d5 E, B$ s9 N' n    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 N0 e5 p5 u  o& x; V
    mcasp->regs->PFUNC      = 0;          // All MCASPs( D$ `2 k$ H2 a+ z% C
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# V/ v  a8 U2 ^7 R$ q5 b
$ ~: f2 L& m+ E, f
    mcasp->regs->DITCTL     = 0x00000000; // Not used
. U- U% s/ p+ t" O5 ^    mcasp->regs->DLBCTL     = 0x00000000; // Not used5 D+ P+ a5 W7 \& Y( S/ g$ j7 J
    mcasp->regs->AMUTE      = 0x00000000; // Not used) j& }. V7 v7 v1 o# l, R
5 R# b5 I- {" q5 W
/* Starting sections of the McASP*/
# z2 K! M# C' `% K" |    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 ]& c% R( v# ]5 O1 M& [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
: x% q. K( ~6 }& j    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 h8 _2 `: {$ B; ^( n( H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ x* E4 u! K2 _% a6 a

4 {; N) R: m) d1 ]# A    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 v, G% w1 A! B5 B1 N& C3 \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 |* T! `$ W, B$ J$ s    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" [0 D! ]7 z" ]) I' C" N8 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& s0 l6 J1 V9 Q( ^  B+ Q
) o' L) i6 z4 J5 @8 l    mcasp->regs->XSTAT = 0x0000ffff; " s# B: T- n. R. t* E
    mcasp->regs->RSTAT = 0x0000ffff;
& I/ U- D- j& ]! v% e4 Y
  t$ |: _) @% g! \! W* |    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ J& |1 v8 {$ r. E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ Q# s' J) a" A3 s0 J/ D0 ~* t    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: o: X, H1 V1 l" f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! g, e5 j9 j9 O5 Y1 ~, r! B' B

& a" ]4 X: z7 K8 R9 ]) t    /* Write a 0, so that no underrun occurs after releasing the state machine */
) E9 R, q9 y- ^' O5 T( z' ?$ U6 t    mcasp->regs->XBUF5 = 0;
/ j" ?" y$ L; L, ~9 _0 u( e- v' e    mcasp->regs->RBUF0 = 0;8 A% {' ~1 [( }' }2 }# t7 k5 d

0 X* s6 \5 k" C; N9 X- E    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 r2 \+ L+ s8 r' q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, s& d3 S) g* w: Q3 c    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! w+ |0 ^8 n& P2 T, I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );% |5 D9 V: @# V; H# Z+ w8 K  \, f
" Z5 v3 ?/ R; y  a4 @6 d
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 N5 k1 i9 \' b% J) q/ ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
) r' I2 H* e# X% l    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 A6 b1 `/ ?$ z0 @1 h$ [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ v; b, L9 X4 K0 N5 E
: Q( _$ k4 q5 k  t9 ^
    CSR = 0x0000;2 j5 Y8 X: ~9 w+ W, m, W
    INTC_INTMUX1 = 0x3d;: G) ?5 `; ~: r/ q" B$ k
    ISTP = (unsigned int)vectors;
  k( F  {' w4 _6 E    ICR = 0xFFF0;  - P1 O3 s, K* c; G
    IER |= 0x12;  
0 B, N/ Q0 A* p# p3 D, @    CSR |= 0x01;  
$ k. m9 R- \$ I+ Q2 H/ C1 K: g8 S( p; i" F! @) z

1 H( ]' x' G$ n( H: O2 j( }4 R8 z/ F# ?+ |. k
还有就是两个输入输出函数:
, f- H6 B3 ~; }void output_sample(Int32 out_data)
- x# S/ y6 F+ t) C{
, H7 W( k/ q4 [  y4 V( r% Y/ s  AIC31_data.uint = out_data;  
2 F5 w/ p! G) l9 t  MCASP1_XBUF5_32BIT = AIC31_data.uint;
* Z  z0 a" t6 f/ E) y. K9 V9 W}
+ h) @, @  Z3 l) P! g  r  P4 D' W7 A- L. I( {
Int32 input_sample(void)
$ ?8 c6 m" s% U% S6 ?& T4 S' f{  & p) D% O0 F7 s
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 s! n! a& g/ J* m" I  return (AIC31_data.uint);
# Q& V7 L9 Q' i7 r}
5 K1 u, f; [7 T) g4 k9 X
/ S& L9 F% S3 q6 [& _7 I/ H
分享到:  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, 2026-1-2 04:40 , Processed in 0.039750 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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