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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:$ w. i# {6 Z; ?; t7 O
main文件:
; @  }  i: }) {interrupt void interrupt4(void)  
$ H$ Y/ {: y# G1 @/ `% ^{
( P  v. e# W4 |* l/ ]  Uint32 sample;- K/ ?6 V' z! k

( k; p0 R6 n6 \9 R7 u: P  sample = input_sample(); // read L + R samples from ADC& u& @5 B- K' f0 M9 Q
  output_sample(sample);   // write L + R samples to DAC 2 p& v' w% ?* }( V0 P
  return;* m( j6 I4 t6 R3 i& m. G" _0 J. S3 d9 ~
}: H3 T5 Q- ~  R4 G# L% a0 t
' ]- e" T  t! l: |: M: i
int main( void )! H; f; n% u: D  e+ Q' e
{7 T6 i) {3 j/ J& U& u5 ?4 A3 H  ^2 Y- W

0 \. {- P; V' P  Z  ^0 F+ W4 U9 |    /* Initialize BSL */  [' x, b4 N: s
    EVMC6747_init( );
/ F, S0 b* R% a+ d$ j- V% [        /* Call evmc6747_intr function */
. l% ]# ]7 Z* O( A, s4 N5 l9 a$ g    aic3106_init( );- m5 }. j) M0 U: U2 g% j
        while(1);
- f) ~$ z4 ]  T" H. k}
4 v+ @, h. m& x; C5 m% q$ f3 u- R5 R6 P. `+ d- H$ U% X
  P" r  E& @6 d7 Z" u; f* O
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( d7 A# L% S! o8 A/* Initialize MCASP1 */
* p  q3 |# q! K" b; N8 Z4 ]    mcasp = &MCASP_MODULE_1;" ~5 G7 E- r7 m8 s
    mcasp->regs->GBLCTL  = 0;       // Reset5 f! A; ]% `" J3 @+ T# A
    mcasp->regs->RGBLCTL = 0;       // Reset RX8 i: X; {- q7 x
    mcasp->regs->XGBLCTL = 0;       // Reset TX: w# `/ E5 p  [* D# @& e, J9 Z
    mcasp->regs->PWRDEMU = 1;       // Free-running: E0 V! Z2 z: M) z- `
   // configure McASP0 receive registers
4 F+ x( Q$ d5 g5 `' y6 L6 c, |    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ E5 O6 k3 S/ x9 {7 F: n
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 G7 @) G$ K9 r) d$ G, q. i    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 |6 z# t/ ^9 E
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 C2 }. Z2 ~+ b6 \; B3 o
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
( X8 p5 V$ f) y0 B  Z0 K" h. X    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  H+ ~3 Q2 t) F- }8 r
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
0 W0 n) E: r5 X2 A- y' I    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, y" \+ k, G" j4 `3 N) H) a& U) W. M! l8 X! I6 g; H
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* A: T/ [! F7 Z# P% u    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; A  C  D/ \  k1 i
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! z) @4 p; F- Y
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) {1 T( z4 C  ]1 t    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& O5 I9 X: [2 \0 t  }0 E
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( i+ Z) e' ^6 s- g( }
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
* K2 Y- b0 G' C    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 Y$ V  C0 C# ?! x. X! A6 }2 t9 X9 l4 q9 M6 A, D
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 g: x0 T$ _+ j% A  a2 k" U, ]. `    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- x2 Z' D" i) R# C
    mcasp->regs->PFUNC      = 0;          // All MCASPs
( G! t4 ^0 V; O2 T4 I  ^# H9 H    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( Y6 g3 {; E! I) ~' Z% u

4 Z  L7 p3 q2 x2 F  M    mcasp->regs->DITCTL     = 0x00000000; // Not used& V3 B7 H% I" p+ m1 ?2 _
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
( C- a6 w/ }" E- j1 h" Y" K! \2 e    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 T: ~# y/ K- h3 M$ r2 A1 C9 u
8 L& c# C; B5 F: K/* Starting sections of the McASP*/4 K# K; m! e  T$ ~/ u" P/ A7 F
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; : `, \! \( e, p( o4 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
4 G3 ?4 {3 C$ T9 a. U    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 ~' d5 e' }, z% E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 k6 i0 ]) c* t0 Y' F3 L* h: H& r. j$ V$ l( n* O
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: C" K: N8 @' c6 ?! N- C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& c" o( A# k2 r    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 E7 H& U3 s1 [# x+ I) ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ ~; v8 b' z# Y9 t- f1 w6 r
3 z4 D* N  [0 G  M
    mcasp->regs->XSTAT = 0x0000ffff; & s0 _. I, T) _& x8 p* A
    mcasp->regs->RSTAT = 0x0000ffff; 8 f0 n# U: ^8 N$ B4 U+ w) r

& g  z3 B; W0 }9 \/ |. s8 f; U    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ I5 i& L' {$ `$ c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* @; S) X* I( q) ?# H1 T9 T
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   m( Z; Z2 t1 [) M  w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: Q0 R" Q: x5 Y& U; U9 E( q- F, i& n! N" Q$ b
    /* Write a 0, so that no underrun occurs after releasing the state machine */8 C% s9 `$ c) V$ c
    mcasp->regs->XBUF5 = 0;
# c  l/ g' {, I$ c: W6 u5 q4 g    mcasp->regs->RBUF0 = 0;
! i( ]2 I9 `0 D5 j  W2 X% Z. Y& N3 b1 R9 v
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 n0 \+ j/ w" A5 ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- H- }# y5 c; P0 o- C    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 i- O1 K4 w; `# c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 o, A: a3 f* @* |; A* i) Y' `
$ w$ g4 D5 u" G. s) t    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * c) @. x" O$ L+ _- d9 I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% j8 ?3 c# }# I9 J* {
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % D/ P0 s* L  N/ h& P$ X) ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. A( K) O/ P1 h1 E
2 ^, f1 w# c" V& r
    CSR = 0x0000;
# K, ~/ _4 ~, Q( b$ C8 x: x( Z4 K    INTC_INTMUX1 = 0x3d;
6 w! y/ O$ \8 _+ s) H3 S    ISTP = (unsigned int)vectors;
# q# n5 Z! t3 N! E3 E! @' W# i    ICR = 0xFFF0;  + x  Q: ~3 O$ H$ ~$ d4 n" F
    IER |= 0x12;  ) c: ]' ]$ ~# Z5 F
    CSR |= 0x01;  0 U  K& X* u6 |3 I
7 \# h, C6 e" B! o* I
8 i0 q- r  P# Q- A: W; g( R3 R

9 e/ T+ D! z5 Y) |* H, q还有就是两个输入输出函数:
" U1 [( v( l$ ], Evoid output_sample(Int32 out_data)/ Z1 E' R6 v8 V1 \8 ~4 ^9 p
{
0 |( H  ^1 Z' }) R! L  AIC31_data.uint = out_data;  * e- S- j8 S4 r) m# E9 O4 B
  MCASP1_XBUF5_32BIT = AIC31_data.uint;# K; \; t- y* U, p7 s: M; O
}3 A  S$ Q# \: r+ l) o  A% O( B, [

' x  w  P* |8 V: BInt32 input_sample(void)
, \! a, S4 E8 E/ w0 d! o* N5 f; i* d0 o{  ' u3 ~, x4 m+ Y
  AIC31_data.uint = MCASP1_RBUF0_32BIT;; t: S) r) {  W2 d% ~$ b
  return (AIC31_data.uint);3 }2 I7 \/ _2 p9 D
}/ ?5 _6 _6 P; D5 o; S
" B9 V, h! b3 o& h; [4 a
分享到:  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-1 00:52 , Processed in 0.045824 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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