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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 l5 S: |' D4 d
main文件:
; M7 j  ]  I9 A, B+ X% zinterrupt void interrupt4(void)  
9 g, _; G. P" ]8 A{
, u. J! I# n! }5 s. i' x  Uint32 sample;" n  O* }& t) P, o/ \6 u, ^

' ]7 [, K: b0 e2 [- r% ?$ }1 V' y! D  sample = input_sample(); // read L + R samples from ADC
7 G* l, z8 b5 x6 \- O% a  output_sample(sample);   // write L + R samples to DAC
1 i- ^: L& c+ h& E% W$ n. X  return;
! E! v( \) f5 Q, k}. }' k& p! _0 n) J6 w
" `- S. f" @7 G" ?! y
int main( void )
2 R" A) m  W3 S/ ^{" M1 T' G. H/ _( G- w9 F7 s  L

+ K$ F! ]0 _7 F5 j+ ^    /* Initialize BSL */8 P2 D( y' z# H7 D
    EVMC6747_init( );
' i0 C) Z* k/ r% i, I' }, K0 g        /* Call evmc6747_intr function */
& [6 F7 ]2 D  k% D* E  l    aic3106_init( );
, ], M  |% k& `, X1 A        while(1);+ r, @3 h$ v. L! U' n/ u) [% K
}
9 s$ _, S7 P6 H) A
* z( a9 Q" \' l% z6 T- r7 E
! @* q! b8 L; _7 d/ aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 ?* a% F; T* ~6 e/ `3 {
/* Initialize MCASP1 */
( d8 L  x" I. w. C" S) T7 ~    mcasp = &MCASP_MODULE_1;
  C6 @* J+ B) n  q: r- B    mcasp->regs->GBLCTL  = 0;       // Reset
6 }# v- j2 W/ x% q    mcasp->regs->RGBLCTL = 0;       // Reset RX: ?7 n, B% n/ o$ A. s( w3 r
    mcasp->regs->XGBLCTL = 0;       // Reset TX" F# C! U6 I: E7 F/ r8 ]
    mcasp->regs->PWRDEMU = 1;       // Free-running
' {. u5 V- V) }% E: U   // configure McASP0 receive registers- y; v6 F( x* n
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
! {3 P, z% v- B1 O9 J& \    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" w. Y: T3 b0 p9 W    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 h3 P) p; L' S8 ^4 J
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
) ^6 m; [1 G4 I$ K- o" ]' G& @* J    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)) J* j0 c: h) ?8 u/ H3 Y; k
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 J8 r, A# B& o8 l0 z    mcasp->regs->RINTCTL    = 0x00000000; // Not used5 j% l+ y5 x  c, N0 X; q/ I
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# f' k6 i2 g) _$ K' _+ l: d% |5 J, L& Y- P
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 f! ]- K8 o) P7 `8 e
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 `4 q: r: y) ]9 v9 f
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ R- ^; r, ~6 |( i    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* A9 z( ]6 D/ F& H8 x; d3 {0 [    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK3 R( y6 ]; S3 C5 i
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,15 d3 `+ w3 F) s- e" v
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 h' ]0 K# j4 h2 b( @& G
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( A9 ?% T& t+ \5 [8 P% v$ t2 W
& j: Z/ i$ Y: y) B    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
# d3 Y" U9 M5 h3 A2 ^7 t+ q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT+ e% U2 L( B8 p1 n. N. X
    mcasp->regs->PFUNC      = 0;          // All MCASPs
9 @! y& h. s( I  K9 n; i& w* q    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 o& G: H6 `5 ]( Z5 X; w: m
6 J+ p* F8 A4 E
    mcasp->regs->DITCTL     = 0x00000000; // Not used  a: _# F9 e% w# f/ ]* e; N' P; G
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
9 i: d7 G( o! D% Y( X    mcasp->regs->AMUTE      = 0x00000000; // Not used! h/ l0 A/ \1 A: E& i  U
+ y+ H5 r# `: O- n
/* Starting sections of the McASP*/  e- S6 ^+ e( o) r
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 C( g1 i' H0 Y  q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  " H" G4 v4 j: m# _5 B
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # [4 @6 K6 N* C/ b, g) R. E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 C- }: x, C+ R6 @7 i; o; i
6 I/ U- X% Z0 [3 Q' q0 ~. s- s" I
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 M3 l8 N' e" J1 s. K9 H( @; X* O$ e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( d$ i& g0 l0 |: L& F3 |
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . r' p' U# d9 B( @8 Q/ ]+ N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' B0 X2 u; h) ~3 G! n
9 |0 f! W6 Z& O/ d
    mcasp->regs->XSTAT = 0x0000ffff;
  w4 K/ Y8 D* u( S  {) L    mcasp->regs->RSTAT = 0x0000ffff; 7 X% `" q5 A- q' P
; G: t1 }9 Q1 t1 R0 I/ |
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) `- h& r- B5 X8 k' o$ A# M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* p- g! y$ r8 P, ^& R' _7 ^( X4 T    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # h" A6 I. R- t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 Q1 X1 L' G/ k0 Y% W1 t' N. j
5 D9 e. f2 P3 F/ l: ~( {
    /* Write a 0, so that no underrun occurs after releasing the state machine */7 x4 n* }8 S6 w% w2 S5 i: f
    mcasp->regs->XBUF5 = 0;8 {: g% Q) L. m  [! E
    mcasp->regs->RBUF0 = 0;, `2 S) k8 L" ~, ^
: U7 J) g: h7 W6 ]6 N6 @
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
: R9 @5 t, C0 |$ x: L6 t9 N2 L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 W' H" g1 G4 L' f" P" ^+ \
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : @$ a: n! ~' j8 \) {, |) J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 |( q2 e' X) l% `, Q/ X- |8 l$ p, s0 O, K/ B" O1 Q, r7 J" J7 n% a
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , L2 e4 j# Z" D  C$ a2 k) c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 D- X$ y( x1 n6 _& B    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- L2 C4 x1 j7 e- W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) M% Y" G  g! y
4 H, j( b2 _; Q  C
    CSR = 0x0000;
2 O. g. K' `5 x' S    INTC_INTMUX1 = 0x3d;5 E! E9 {- i. E% O' y' v( f
    ISTP = (unsigned int)vectors;
& v2 ^+ }7 n- |& z! J. }    ICR = 0xFFF0;  4 n! X& f3 R2 ]
    IER |= 0x12;  
& ^5 B2 R5 Q( S    CSR |= 0x01;  0 K; S$ t# S, A. P
) \6 g; V. w2 x0 V% ^

: r& v# A6 d+ R+ l) c3 u  s4 Y* Q4 D
还有就是两个输入输出函数:  o* ^: G4 @3 L3 f! r$ c' ]) |
void output_sample(Int32 out_data). m/ x- ~; T2 |" }: y' `) s8 f
{1 N. |2 ~. s) v; x( L
  AIC31_data.uint = out_data;  / S9 O$ t/ |1 Q( G$ m% R
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 L2 G. v8 ~0 k9 Q( a8 J}
  m9 s0 |5 h7 G0 `& ^
  u  J" ~& d+ d2 _* K6 {( RInt32 input_sample(void); H/ P5 k0 M, Q  m& k. c
{  8 o6 P% G* p+ N; P3 D' q/ r
  AIC31_data.uint = MCASP1_RBUF0_32BIT;+ {) |. ]( T7 H; ~
  return (AIC31_data.uint);
$ r5 b% h) O* P) m}
9 ~9 o9 u" w: r
/ o( s) s( S( F1 m$ }: W; l4 ~
分享到:  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-4-8 04:26 , Processed in 0.040985 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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