C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( z  j6 Q3 r) a) \% B+ ]/ rmain文件:) x% f. r) Z* H0 s  E" ]0 o0 S
interrupt void interrupt4(void)  ( u0 G& \7 [% u' E* K, e
{* B6 [6 x; [. d" f$ ~: w
  Uint32 sample;
$ V; d$ H4 n% R
  E* V; R0 C+ B$ L7 s, V  sample = input_sample(); // read L + R samples from ADC' _% x2 ^0 w( p: I
  output_sample(sample);   // write L + R samples to DAC
' x- v) a! r( U$ U4 g  return;7 j9 J$ H0 H; h
}
" |0 L" p  E6 K" j+ v/ K
! z  ~# f. G; c: Y' P) e6 ?+ Tint main( void )8 w% m0 z5 R" m6 r
{
1 G% r9 j  N' V3 l
5 ]+ y$ o1 [# l: L6 D5 n% m    /* Initialize BSL */
1 f) Y, R- \7 v. f/ X! [* e6 |    EVMC6747_init( );
5 W7 R; U4 h; g4 n' t6 B: E        /* Call evmc6747_intr function */; ^* w  U1 f3 f8 ~
    aic3106_init( );& `2 o, W" I3 u
        while(1);
% ~2 O, D' z$ _}4 f1 t3 C5 X+ ?2 a" d+ F
0 A% B! r0 m9 u% c  o! J

! ?* A6 H' k0 P" m2 y% j, Eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 O, {9 Q( Q) Z* W& Q8 y/* Initialize MCASP1 */
! S6 [/ T; [4 C    mcasp = &MCASP_MODULE_1;0 S9 L( F+ V! A9 w0 ?6 d# g' u, K! W
    mcasp->regs->GBLCTL  = 0;       // Reset
- [2 s' T( @( ], T( c    mcasp->regs->RGBLCTL = 0;       // Reset RX
2 ]: T9 ?6 x( Y3 y! {0 M    mcasp->regs->XGBLCTL = 0;       // Reset TX
% B, u; o' F( }6 R8 I; |# @    mcasp->regs->PWRDEMU = 1;       // Free-running
1 @* c& a, W$ n! Y/ h- D   // configure McASP0 receive registers
9 z" @% p2 i& Y8 D    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
; K  H$ \9 l3 i% K% v% C    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 p; x) R, I4 S7 d+ E' G    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ N+ _6 v$ d+ T. A  q! p    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 [' d1 o% x: d    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
; }7 S( e7 `- G9 k5 T    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 }' Y0 S+ H% c$ J$ w6 V    mcasp->regs->RINTCTL    = 0x00000000; // Not used1 j' L: ^; r6 q5 |! S
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& H# U5 ~  V) \6 n3 Z. i, G

! H9 |7 J+ d3 |- N    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used( g' S, `( L7 m: I1 Q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! p: B2 e0 ^. \' G  \
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 Q) f" |; e8 E$ P! J& [1 H: C
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 c6 W7 t* n. d+ Y4 r% X4 Y    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK4 `3 ]' I3 C. y- X
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  S( k# W- v/ {/ Y
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit2 J; z7 J* a% H: j
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  p& h- L* E( R2 y( I
  h) X7 m0 j* t. R) \( Q( F& {
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN9 i! v6 x1 l3 a5 x/ |
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT0 k* O& l* i1 \! h0 T2 J' d
    mcasp->regs->PFUNC      = 0;          // All MCASPs' g5 T/ Y: u. U* |6 A1 ^: X
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' L5 X, ], }; T7 R
; H) `" m- R- ^    mcasp->regs->DITCTL     = 0x00000000; // Not used; w: y3 F) D" {
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 c6 Q# Q' D  c, o2 ?    mcasp->regs->AMUTE      = 0x00000000; // Not used
- v. k7 q+ r, c- U2 E/ P( F8 F5 T! T7 K
/* Starting sections of the McASP*/
6 K" L2 O+ N) I/ H+ k    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! H# a; \3 l( a/ [8 r, v+ I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  # z2 r* _% R5 L, w
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( d/ ?. X- B  `2 x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# r! f/ d) ^0 f0 |6 d+ X% X

0 z6 h8 d3 J5 t. G  R/ Y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 s' Y; M5 P( v2 t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 Q6 }3 q9 Q# P% U* |" f% o    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 ?7 C: y' v1 f7 L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" A2 |) r# s4 t) i, w+ y+ b. P! Y2 T' _. o! w9 V$ Q% b
    mcasp->regs->XSTAT = 0x0000ffff; # a& x1 B2 N" o7 Q
    mcasp->regs->RSTAT = 0x0000ffff;
7 Z% T/ k) s2 @, ?* v. E- {" @
% Q$ f% v, O# g    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 o( ~0 g* T  @1 T2 W" k+ |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% J* ~+ d) b" |! ]  u    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ g( P0 N) @" V( v& q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );* x/ V/ O8 X& b4 O
: }; a' u: n7 d% j2 O( M
    /* Write a 0, so that no underrun occurs after releasing the state machine */. p3 D, J  `! q$ r7 w! x
    mcasp->regs->XBUF5 = 0;/ \* `% E" x% o: U
    mcasp->regs->RBUF0 = 0;
. ]2 ^7 Y' ]! M* l  Z" r$ J  Z, R" p6 ]1 d# ]/ p5 y# f  O8 o
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 u* U$ P- i% b* h( p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );8 a5 M1 }; {7 {9 H1 V2 b/ k
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " w3 k/ _, M9 E% _1 g& {+ g8 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) H! Z7 n) q& s; E! R: U

2 V; w. S$ p  [) ~# U+ Z( h  D& z    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 y/ a5 R# k6 V7 O* [$ D0 q4 x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 |- F" |3 Z& b4 E1 ?
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( @% i7 X2 `8 o0 N" R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( K& V5 ^0 c* @) C, t

/ y) }. |: R& W6 N" e7 W6 k0 d    CSR = 0x0000;% `. A9 U: J8 X; j
    INTC_INTMUX1 = 0x3d;) ]' v- S4 c5 m3 X$ K
    ISTP = (unsigned int)vectors;% j& k) _' N/ E2 e. g
    ICR = 0xFFF0;  " J7 n9 r7 t. I6 }& q0 Z# A
    IER |= 0x12;  
- S7 r1 c& x3 p: w, {. p    CSR |= 0x01;  3 w" _: _' l: E7 ^
2 {3 w. e+ i9 c5 o: o3 ?

$ A0 c1 z/ s) E% z
( s. B" h2 m( Z还有就是两个输入输出函数:" F9 R+ b8 C8 \
void output_sample(Int32 out_data); J8 P6 a$ f. b  D" o' }
{- I3 F/ v- G* f0 D4 P1 A
  AIC31_data.uint = out_data;  % U. r3 M4 @6 Y; d. k* a& R6 z/ z/ @
  MCASP1_XBUF5_32BIT = AIC31_data.uint;! i( i# ?" x. w* K. y; Y
}7 Y% `7 [4 ^- }
9 \. U$ z, Q7 p" |7 U
Int32 input_sample(void)
- @2 `2 z2 c9 F' f/ l{  
" t6 I' [! v' W7 O- a  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 H2 `; }; n! [+ d/ d
  return (AIC31_data.uint);
% a9 A( b4 g5 U5 w}
# Z7 ?8 u. N8 t' o# l- Q; \8 e6 j7 m* l* h9 ^
分享到:  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-2-6 16:29 , Processed in 0.039303 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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