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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! T. F% F1 ~4 i1 r' n0 m
main文件:
/ s  S" j& p# G9 H6 Z! ^" X5 Hinterrupt void interrupt4(void)  + R! ^; w& i& m* M6 Y/ o6 ]) v
{
0 @& k" n; V6 i) i3 A+ O7 e  u  Uint32 sample;
; R" b' ?& P2 |7 [( V3 `; i3 l& _% g: y. [: M5 m; S: U! C, h
  sample = input_sample(); // read L + R samples from ADC" a' N8 d1 e# P3 Y4 |: u/ m* ^
  output_sample(sample);   // write L + R samples to DAC " K* y' t2 T4 L& z3 }* Y
  return;# j! `* I, L+ V+ d& K5 U8 ^
}
5 F& Y# \/ n; ^6 G. L# U) [
- g- j/ B8 q0 `) Z+ x$ t2 F7 N0 Iint main( void )
. B& O8 E1 X* A. B: U5 Y2 {8 V{) Y% n: o0 A+ f6 o6 Y

# f* H* z; |1 {9 _6 f    /* Initialize BSL */# C6 ]; S' t, A2 \& A) W; B
    EVMC6747_init( );( G" k. u7 `8 p3 q( E( J
        /* Call evmc6747_intr function */+ X! _0 T; s$ j- G3 K$ X1 t; B
    aic3106_init( );; f" K! j" ?4 _  x1 U9 g
        while(1);
- T; o9 T2 Y5 t0 d* K}9 O6 |% U4 l( _0 x" ~
3 }) ?' Z/ {& p$ y
, G- V$ R( h5 y& ]5 u5 w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 Z5 }( Z8 h+ ]3 v+ r
/* Initialize MCASP1 */. W- W8 x; ?4 E3 Y2 o- m: D
    mcasp = &MCASP_MODULE_1;
' Z; d. @  J' H, r1 ^    mcasp->regs->GBLCTL  = 0;       // Reset9 {3 S( s  ]8 c$ @) \) p, \
    mcasp->regs->RGBLCTL = 0;       // Reset RX/ E4 w5 e; p5 b! `: h$ I" T
    mcasp->regs->XGBLCTL = 0;       // Reset TX
6 z; b- D& a: i, m4 X    mcasp->regs->PWRDEMU = 1;       // Free-running9 M* A8 Z1 m$ a4 ^! @
   // configure McASP0 receive registers
/ E+ g8 M  e* A% b- A9 H    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
0 c; V: y3 y) u$ \    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; F3 E$ j$ D% d$ l2 n+ k    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* z+ f2 K( G+ l/ {* u
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 \+ J' M! O( C3 ~    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
' p+ H2 r2 T$ S    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 L3 u$ u1 v0 ]! E6 z
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 Z. G+ a; N/ {% L5 I    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, [. z# m! V/ I6 A  ~! ~, ?/ ~2 \0 B, j1 q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
/ r( N  p( Q% D* K0 k    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 z3 f' g' G! O5 `$ r# u) D" d) P    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ x( [9 o! C) L1 N  c  }8 a    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  T  m- F' j! q1 f, x8 I- u    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. v: n  F$ z9 ?" |9 Y8 b# I
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
& l5 d+ x7 @0 j2 U, }    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit) E% E5 x$ V, e- ^
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  D# b/ k3 A# h& w- p# S: I, }1 @5 g  {: a% `
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 b/ r) u" a4 Y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
8 G5 W+ D" L* h    mcasp->regs->PFUNC      = 0;          // All MCASPs
& y; I/ W* Y. @5 Z2 Z% D5 B    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 O) W0 ^" h+ Z/ ^3 g7 H% j6 M( Q- D  {; [0 S9 i7 a
    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 [1 A0 v/ H4 Q2 U9 r    mcasp->regs->DLBCTL     = 0x00000000; // Not used/ O- l! l3 S: K: |1 I4 Y; q& T- g! X
    mcasp->regs->AMUTE      = 0x00000000; // Not used
, t1 t) Q6 ?+ D7 i+ N/ h# N% n* e- {) V
/* Starting sections of the McASP*/9 |0 U$ T, B1 f4 O  x
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# y7 F! Z, J1 o- |( y6 i    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
" A) q0 `/ y* g2 S7 R    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 J* M! v0 P) u" v- E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
6 H0 _$ ~( m% F0 p$ S9 P
% o+ f$ ~. {2 m8 \2 m2 {! }    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# {* j. u1 O  i    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: ]1 O# ]; T5 f8 V" n$ `! i
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - y8 j* u* q3 O8 K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! j8 s% Q7 a! I6 x+ [2 I
6 C# F. P, z, U# H8 B. g& _$ K3 E    mcasp->regs->XSTAT = 0x0000ffff;
, Z2 q; ]" Y1 L4 K    mcasp->regs->RSTAT = 0x0000ffff;
# m* y/ D  @( M/ G0 I% u# Q  q- g4 g5 ?$ o6 P0 F
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' V) a. J* h8 v5 N3 i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# [7 t4 R8 t8 b, ]; Y    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 [9 r3 ^  p# `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );: E& V$ x1 t3 {7 n7 t
9 g. Z  _: h) p$ a
    /* Write a 0, so that no underrun occurs after releasing the state machine */8 x, U: y* {* M+ X% l+ ~$ K
    mcasp->regs->XBUF5 = 0;/ q4 L. k8 h3 h% Q) }
    mcasp->regs->RBUF0 = 0;1 t  j7 q2 S5 J3 F+ U) J8 {, g

: S0 @) K0 a" |) ]- w9 A    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ }5 r7 r$ b4 n& B( V1 b, E; M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ O) }9 U, q2 q- ~# n
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' ]& x+ p2 a+ D3 n4 P5 D. q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# e- l1 b4 _& P( J! h; w
6 L/ q$ X, C8 R' L' w/ O' `    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' ~' @5 j' l6 k: h& y  R4 y; V& b+ D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 Z- d9 P4 y. i/ `: {  q    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % J  D7 u% |, K3 v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ L) y/ H( u7 O: t* U) w+ W. A

4 H8 Y3 t, x* [3 \    CSR = 0x0000;# P4 i4 U; z3 T. w. K) V
    INTC_INTMUX1 = 0x3d;) ]* y% }' `8 T3 q- d5 P: C% x
    ISTP = (unsigned int)vectors;
0 `" q( C3 H5 l" f    ICR = 0xFFF0;  / T; P0 c8 L) i3 K" `8 P' M
    IER |= 0x12;  ' Z4 ]) D% \2 u; H) S: b
    CSR |= 0x01;  
5 P2 d% U2 l2 Z" I& d# u- m/ r, a5 k& Z

9 y, O, Y# L3 F. o1 ~4 l/ J$ u8 h' q* ]7 B2 z% x% `, e0 j
还有就是两个输入输出函数:  v6 p  [, S% ?8 y* F4 v" I
void output_sample(Int32 out_data)1 }5 J, i2 h! E& z* |  d
{
3 u6 W0 f5 Q. K& [+ c0 k  AIC31_data.uint = out_data;  
! `, L9 H3 E- R+ C' c  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) G* O$ N* U3 Z# f: T}! A5 `$ l% }; m  ^% U( c; w6 J% K
6 f, I7 |' e% O* d. E3 C8 v
Int32 input_sample(void)* k$ L0 o0 M$ y4 _9 Z
{  ) f3 i# n& c1 ?. R) H. s
  AIC31_data.uint = MCASP1_RBUF0_32BIT;! r5 R' p  b; D+ M& @; B7 L  I1 {" Q
  return (AIC31_data.uint);
. _. ?% M4 \9 q) U: l; |" r}
' }/ U$ E" [  `5 c& w4 o. n- r' y  b' w
分享到:  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-2 11:08 , Processed in 0.041289 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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