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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: X$ H: z! T4 ]; W7 ~, ]
main文件:
0 ~8 p$ X4 Y7 G/ K& }0 x4 kinterrupt void interrupt4(void)  
: {% |/ [8 P: G. W6 Q$ Z- L{4 E6 y6 W$ x4 ]! k
  Uint32 sample;! e# A$ U1 G% r7 U  H

9 C" z- J  s+ q0 W( D0 _  sample = input_sample(); // read L + R samples from ADC
* B5 G9 L3 j1 b. h  output_sample(sample);   // write L + R samples to DAC
# Q. R6 m8 M  r& S7 t  return;8 N. m+ B7 L# f: ]+ p$ C* K5 ]0 g6 g
}# A: [. G7 f: m. w/ z- G
9 ?8 p: M3 ^1 O. g8 Y
int main( void )* M, a0 n* @0 \0 G0 D
{
: o3 n3 R4 c/ d! T  q
! ^+ J: U) o) f; y% c9 ?  f    /* Initialize BSL */: t. H- |' x7 N0 m  X9 U) P! T$ F
    EVMC6747_init( );
  q/ f/ z5 Z% k        /* Call evmc6747_intr function */. Y! ~; W% ?& u" J) F
    aic3106_init( );* N2 c7 m% t& S, `
        while(1);7 z' Z% i# a7 Y
}3 z$ [+ C3 G$ g" f) E

- B! m) T0 `9 M% q4 D+ u6 K, u- e) ~! n- q, g. x; _8 R& y8 v  N
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 d" w9 A. c; c; t% M$ V' b, b
/* Initialize MCASP1 */
8 o1 ?- h6 v% b. K- |/ o    mcasp = &MCASP_MODULE_1;
, m1 K/ B! ^& u# r. I# {2 m    mcasp->regs->GBLCTL  = 0;       // Reset, q) P3 i1 v- P
    mcasp->regs->RGBLCTL = 0;       // Reset RX
* z1 U: E% g) S. ~    mcasp->regs->XGBLCTL = 0;       // Reset TX5 s5 [9 z9 c& J! V& I3 d! z3 E
    mcasp->regs->PWRDEMU = 1;       // Free-running7 q% V0 K- ?' w
   // configure McASP0 receive registers
: U5 C& v# U) H: j9 ~    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: _6 ^+ g" X0 n- f; R
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 V/ w4 P9 `/ o, x9 ^2 U) d    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. R8 G; V+ v' |- n    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& r+ D; g* ~+ ]
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)( M: y1 P6 t4 v9 v5 o
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
: @* Y* a% c- ^) w    mcasp->regs->RINTCTL    = 0x00000000; // Not used6 v/ y. O) `. |+ Q% O* R8 |2 l
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 G# }; n4 |- o1 S, Q5 e) S- ~% n# y/ b! i3 C) j; f+ F9 p9 Z
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( _" @2 ~3 {2 z7 |( g! ]% _    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& t3 G" j* }: Z1 G( M
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
" u5 ^. ^3 d/ ^1 ~/ w    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& u# S/ Q1 Q2 Y) N    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& p( N( d  U' g, `2 n6 X
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
" e2 N( Q5 |+ J: n. T8 l& I    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit  t5 F! H+ a9 D# \/ x, ^" _- a$ W
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  @' F- G% J% S! @
  g" b/ G% i  Y, o$ ?) j- I4 L# ^    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* ~& b6 Z* o5 x7 v/ H1 D$ M4 h4 E
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
+ [) [9 T6 Z# \3 h- t: Y    mcasp->regs->PFUNC      = 0;          // All MCASPs
3 [  h2 ^# h3 A2 P    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! H% E5 [: W9 Z. v

% C- c2 \* I8 P0 J2 a: ^    mcasp->regs->DITCTL     = 0x00000000; // Not used1 X, [/ R# @! |& I( s5 `( x  s
    mcasp->regs->DLBCTL     = 0x00000000; // Not used6 |$ Q3 B4 W7 l3 ?6 O+ Y, w, q
    mcasp->regs->AMUTE      = 0x00000000; // Not used/ L2 ^! T1 z+ [, Q* M5 w

5 w5 k: x0 n# J2 S- o' z6 f/* Starting sections of the McASP*/. y, y% ~: c4 R$ m( F
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( I  b+ K  Q" F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 v- u3 T/ {1 e* I0 O! J/ {    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' ?7 q& y/ r& q3 Y1 V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- g0 _' {0 N" a* K4 n4 A% I* E' o# q0 u% t  ]+ E( ^: `
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; S  C- K/ l: `9 K3 B$ c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 G3 l! _2 y' D    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 R# J' a5 i3 P9 T$ N- Y/ [/ p) c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" o! T# a' Q3 j
' x1 q4 e, a* h4 E
    mcasp->regs->XSTAT = 0x0000ffff; - h; r5 j4 Z  {
    mcasp->regs->RSTAT = 0x0000ffff;
6 g9 O- z; j- \$ y
% b( }4 I4 V: o    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 r7 f: R. s! ]; |9 g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" O8 m) b/ m" I; d
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & ^. ^! s/ ^; J& q0 O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ W/ M0 [3 v/ F: J% i! ]* D2 `6 Q7 Z5 U: l
    /* Write a 0, so that no underrun occurs after releasing the state machine */
& a8 ^% L8 z" |8 ~* J5 u- i    mcasp->regs->XBUF5 = 0;
7 a0 {2 j( G: f% ^- i6 r    mcasp->regs->RBUF0 = 0;; b4 t) P- Y1 Q4 `9 x

8 w3 i& c( P/ S    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 u! q0 A, Q; c; q- K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" J5 _7 r% |: T5 B; n! i
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 [" Z  C. Y  j- |3 \( [8 a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  R4 x9 t: B2 L% a" W& s
% m6 s/ W: O, B0 ~8 E$ H# R& T    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . A  Y  `7 W" U6 V/ A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 M( Y' E% x/ ]: |# a    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' T1 J  Z0 W6 y$ H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' v  k& r& j! d" E! T6 e) B/ k# P# I7 C5 R
    CSR = 0x0000;
; j0 Y1 J8 Z2 o6 J    INTC_INTMUX1 = 0x3d;; a6 D. @- H- l' X$ I( u# Z
    ISTP = (unsigned int)vectors;
. b" w6 D7 i. ?) b0 [    ICR = 0xFFF0;  
* G% |4 ?5 y, S/ R: O+ Q. G    IER |= 0x12;  
/ a/ f8 Z9 D, L2 G    CSR |= 0x01;  
8 M- u3 ?& y9 r+ p, G2 x" A& p$ d1 U! n2 |
( u; @: b3 a7 p1 |$ k
8 L& i5 N  @8 O5 c7 J- |1 e/ p- z: ?6 }- C
还有就是两个输入输出函数:
! M8 Q" u0 h0 d  Z4 m# ?) D' y' C9 T1 n4 svoid output_sample(Int32 out_data)
6 j, ?4 m2 x& S7 D; [9 P( n- V{
* q! o6 p, E7 y9 F9 g  AIC31_data.uint = out_data;  $ x# y+ h2 w3 k+ y; m
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. q- l# C8 o% }( E% ]. Z/ X! ^' r}% Q! n; ?5 A' K- i6 Z* l. c

. n2 D. `5 j. F2 MInt32 input_sample(void)
8 v! k8 y: @3 n. }, @0 O2 {{  % y+ |6 m8 X  |7 D9 U
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 C. M7 ^6 S( i2 P  return (AIC31_data.uint);" p: u5 S6 a7 v0 B, }+ c& f! R, R
}9 ^- E1 s" ?  Y& o, f4 m
# i3 x' u  O$ X, E. y. f
分享到:  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-26 01:56 , Processed in 0.040385 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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