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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, y# h! q! Y+ l: s, Fmain文件:  ?4 n3 Y) m- i7 }
interrupt void interrupt4(void)  7 `2 g3 B* Y  G, X% k0 g
{; N0 F* H  O5 U
  Uint32 sample;
% ]% @( [; }7 N" T" h; @3 S0 }$ I( {% [
  sample = input_sample(); // read L + R samples from ADC
" x8 i% n; y1 {& z) G: b$ w- L! O  output_sample(sample);   // write L + R samples to DAC 3 D. }& o  V% b% j+ J+ H+ O& r. p% C
  return;
/ F  y9 w0 r, H6 E}" n8 c" b" J: l! ?: {: a$ c8 F! ~

0 t$ v* Q/ k7 cint main( void )
9 [- `/ M) Y# d5 c6 K: d4 n) G2 U. ~{9 r' i. s) _% D) B% h
7 r/ {+ |, U6 D. \; U5 V, R3 \3 \9 t
    /* Initialize BSL */
" ~. n) v! o& e/ T# h$ i    EVMC6747_init( );2 A' a4 a8 ]1 A8 E6 a
        /* Call evmc6747_intr function *// U7 x" }9 G) J  |# p; f% s
    aic3106_init( );
1 V* N: p4 z8 j3 [        while(1);
% u  n) d# C7 a0 Y: s+ |) S& V}( d4 R* V/ _. ^# w0 t' X2 P

9 T5 j9 E$ d: q# H8 R5 n2 e
0 U' |2 g2 ]* H- A: Laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: a  j" ]5 A. |3 T0 ]! Z/* Initialize MCASP1 */! E5 Q& Y0 p( R6 o& e- f- I
    mcasp = &MCASP_MODULE_1;. ?7 O; p$ v% K. h
    mcasp->regs->GBLCTL  = 0;       // Reset
% ~& d( ?: M9 W6 `1 P9 z4 b    mcasp->regs->RGBLCTL = 0;       // Reset RX+ [% |9 W/ z% Y
    mcasp->regs->XGBLCTL = 0;       // Reset TX
3 B* f0 t" v& A1 T+ d  x9 B7 ]    mcasp->regs->PWRDEMU = 1;       // Free-running
; t: v+ i( \1 ?( ?- E/ ~* I   // configure McASP0 receive registers: O! j8 N+ j* `, E3 K  [) l
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 j+ q0 N( w( {* G& j    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 q* T+ O4 F$ B0 @6 b4 [% ?  B0 L0 o    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ g% f$ B& [% [
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' ]. H5 a8 W$ G. Q4 f1 Q7 J    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)8 M, }$ a0 R3 a  [: j  T' ]* B
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- I  W! Z9 d' u1 |8 S7 b, o2 |
    mcasp->regs->RINTCTL    = 0x00000000; // Not used1 d$ j. R& C) Z0 L9 F
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! U' T, @* K* o% w
$ R/ x8 @$ u( V- b/ V0 o4 W    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used  a( B# }/ H8 k8 @  x; a
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 @3 I, s) Z* G4 X
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
. E9 u' D+ p. K$ W$ i& {    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 P! B( U* W. W: E' t% t
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
  k5 q, M% ]1 G    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ q6 U) V( b2 X$ p' r( S    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
9 M$ w% P/ ]  c. J6 M    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! m3 C, k; V  O- z; P
' G; r3 t" y2 A( i9 q9 D, E. @5 c/ v    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
, ]% G- n, Q, @" `, B    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
" ^2 O) g- r6 c. Q    mcasp->regs->PFUNC      = 0;          // All MCASPs
8 E+ ]' Q& x+ E- p; h: ?    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 x0 p) G5 L, p% d+ x) T; S
8 _" e# C6 o3 Y0 w* O) m: ~3 q    mcasp->regs->DITCTL     = 0x00000000; // Not used) K$ x) L! P" _* Y, p$ V2 P
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
, }. s! c* m/ P7 ?9 i    mcasp->regs->AMUTE      = 0x00000000; // Not used
( d8 y% G- z% w$ e/ F- J2 j, B! l9 h- W5 m2 P3 ]0 Y  E7 S
/* Starting sections of the McASP*/: X8 d7 U) p* T. z4 F+ S
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; }  u8 L  t9 C3 j0 u5 I2 S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  0 P" r  S3 p; F% Y
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- H* v: I7 S+ X: p4 T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
  H. T0 e& ^: [- k0 n& q( R
  g# p# W, `% q! L6 h. M    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 1 z5 v+ L' l2 k" r% k2 W# S. ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! }* x+ k, J* x& A9 x4 x
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 m/ h5 q! N" s( b6 d2 O  H% `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" ~# ]0 |% u. ~; m

' `9 z( `% [( Z: w3 N' l  q    mcasp->regs->XSTAT = 0x0000ffff; # D1 J4 l. ?$ U, B( n6 `  U
    mcasp->regs->RSTAT = 0x0000ffff;
( o  e* y3 x; ^5 b
. c+ C$ D. q  N9 L. Y9 a0 I0 E    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 G( ?; i3 G7 q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: h# h7 x* _& r+ ?: j" z
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& o! M5 f. h$ `  B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 D% x$ m' G7 x# Z, s, c

1 B  a$ s! e- Z* i    /* Write a 0, so that no underrun occurs after releasing the state machine */
9 Z) U3 z  A" o8 ~# y& R    mcasp->regs->XBUF5 = 0;
2 c0 K6 H; T! k$ `% d; J    mcasp->regs->RBUF0 = 0;
2 u* w& Y% Y9 I9 b( W. k9 l' F3 t
. ?' ~4 [2 ?$ M) h5 f    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 i# C* E2 F4 H9 c2 O. x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ @7 t7 x0 G5 H; D) _1 {4 e
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . D8 s% v) {# Y6 i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; h) b7 e9 o4 W
: j3 ]4 T: ~% K) a2 ?
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! V1 y, m7 m- ]8 l8 D4 S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* v; t! x5 l: |: u( _    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 b# F3 t$ v1 M0 L6 S1 D* ]3 o! H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
% V1 A+ z$ p" G; F& D8 k8 J
$ I) l9 }$ Q3 \& D0 ]) M    CSR = 0x0000;
& m, a3 e- ?7 H( b4 Q    INTC_INTMUX1 = 0x3d;
6 ^8 q# W( ]$ v9 g" b" f- P% @    ISTP = (unsigned int)vectors;$ v' n; a, {3 K# r* B& A
    ICR = 0xFFF0;  
0 p9 n# i: g$ H" G    IER |= 0x12;  / a$ ?/ j5 Z0 z; |) r
    CSR |= 0x01;  
, o$ o. y6 }% P) i3 u6 W& S$ k1 q% j; ^3 D% g8 S) Y
: j3 X* \2 c" W
6 A8 Z+ e6 D% ]
还有就是两个输入输出函数:: J' O# `- C! }& f7 a: O8 v
void output_sample(Int32 out_data)
$ ], ^/ F& L! g1 l7 |" y/ R# |' I{8 G2 y, W* w! `& V6 _
  AIC31_data.uint = out_data;  $ D& L9 U4 u& ~0 R& v4 J
  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 C+ P% m" H# g/ J2 h% U1 b
}
/ @# J4 }4 Y0 U5 I7 D. q
- A* R2 x0 H9 I$ r0 k' T1 }Int32 input_sample(void)  B) S" ]0 D  B' o" q/ E8 u
{  ! t: p6 ^: D4 ]9 I8 O. M
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 |  q8 p6 T1 i( b5 \* A: c+ v  return (AIC31_data.uint);
2 q- n% z) J1 H+ G; {+ @}
0 w( O% n: F# R: I: ?
+ b1 j! l7 q4 O( S+ ?; p0 ?
分享到:  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-12-9 00:39 , Processed in 0.038368 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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