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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* E8 f& m3 B) ^main文件:; T" h. f; p9 V' K/ b
interrupt void interrupt4(void)  5 U' f+ u' h& p
{
- n- X! o' d6 t2 a0 r8 s7 n! I  Uint32 sample;
$ Z6 U: l1 H$ _! \2 v1 {5 |
- i8 P: q3 \& N: c0 {3 K& g  sample = input_sample(); // read L + R samples from ADC
! D; ?& s' ?& y) j) _; C  output_sample(sample);   // write L + R samples to DAC : f. D/ R; o6 m0 \) z3 }1 k# `  |
  return;
7 B2 O" P2 N& C- d/ ~* q" i}' Y3 T1 x# C; p$ R

9 d4 W1 ~3 G2 M' I5 R% h# Qint main( void )
) |1 Z% i! i: e; s* X! x{
# P4 V/ k7 t- m1 |" D6 I
( e# A; b9 s3 b' W) ^    /* Initialize BSL */5 j' j* x2 n$ ~, D+ s( w( X( H
    EVMC6747_init( );
6 ^5 e3 m# A% r/ `' ?. {2 l7 H; q  W        /* Call evmc6747_intr function */
& G$ U$ t# i: ^0 H$ v9 d    aic3106_init( );
) g! S: H2 H- B# F# l: n        while(1);9 F# }4 W% p3 I* T3 E- j# U0 x
}
4 q1 S0 C. B# o; y1 p7 t
% W) o; w& k) {8 M5 ?% ^2 ^# T5 F6 H* v( w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: z. k7 V* X3 }4 |
/* Initialize MCASP1 */; I  N; g) u, V- ^" O
    mcasp = &MCASP_MODULE_1;
4 f; U& B- l# \1 m: h6 b    mcasp->regs->GBLCTL  = 0;       // Reset3 S5 a3 W: q, N, W% U' [
    mcasp->regs->RGBLCTL = 0;       // Reset RX1 @+ Z! r8 P9 P2 K3 f
    mcasp->regs->XGBLCTL = 0;       // Reset TX
! [1 L; _9 O/ \! v    mcasp->regs->PWRDEMU = 1;       // Free-running
2 d% M' J" \. y8 b" ]   // configure McASP0 receive registers
* Z  ]) J# J; B+ D. j  ]    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
0 Y+ X; _+ B! C9 u    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 ~8 R/ G+ f: S
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 p! D) x1 g4 n$ q8 _5 S! S; r' D. j
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* Q% U9 Z9 p3 h# A6 H
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
' Z3 H; h8 l( v1 |3 Z7 E5 B* ^: F    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1+ g1 ]: C7 \- L$ ~
    mcasp->regs->RINTCTL    = 0x00000000; // Not used1 c: I+ k5 P9 K0 G% Z3 w- o
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% c# T! H6 J6 {: e% [$ s" y! E6 o
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
) i6 n( p2 U, D- V    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 R- \: w7 l5 N5 T. H* ^9 z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 n5 W7 f  g4 J7 j5 }. |
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  Q' X7 u* m' g# |. {, q0 _    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
6 M! ?/ }0 P2 w2 G' X8 F! {    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 \1 Y/ e- E1 F; e" w# E& S
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
! ?. K' l2 W: {/ E4 ]& s) `$ ^    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ \# p8 N+ X. R/ A6 i! n
' G$ ^3 F6 ~' T0 W3 @6 H    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* O7 ^( V) |2 F* P. e6 s- C
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 d0 z' y, ?0 x$ H' Z  i
    mcasp->regs->PFUNC      = 0;          // All MCASPs5 R! M! B! T9 V9 j; J
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* o" m, A5 G% E0 F* W& b- Q3 ]9 _# f  w% ]$ d& K/ I
    mcasp->regs->DITCTL     = 0x00000000; // Not used
$ i: d+ e" h+ ]( i, |$ G) k/ i4 Q    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. z$ L# [0 u% E3 J5 u" K) \+ k! }    mcasp->regs->AMUTE      = 0x00000000; // Not used) m4 g) J( b3 Z: t2 v8 P& l4 }
" c  N0 S" {# e1 R) n/ A  q
/* Starting sections of the McASP*/: Y+ g5 r; H- m7 E1 N3 \
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' ~+ m6 B) y& o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  & |! [8 U" k4 i# }+ h
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . L. b1 D0 U3 u( [, ?- C* z6 @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) Y' l) o* w( i4 g; E

( h0 S' ?; ]! ~. d# C: {' ^6 N9 @. V    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& y( c* K' W. K/ R) B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 g3 A$ i0 _; j. m# \# u  [    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. ^, s( r( y$ K; W. t6 m0 Y( g3 G* j, o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, ^: v8 `' _* j) u# Q- J
2 e" l+ P5 ?+ X) r    mcasp->regs->XSTAT = 0x0000ffff; 5 C  m( ?2 _! }, L
    mcasp->regs->RSTAT = 0x0000ffff; 7 V( X1 v: \7 h

) Z4 N7 Y( F6 v# e    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) Q: a" T' z) s4 i" k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 W0 B) e* |% d  v6 i8 m- d
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 y* R! {1 E" v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
6 d5 C5 [/ i* H/ ^6 I" w1 K% [/ q% T5 o2 l/ e4 M0 w" p" E( P
    /* Write a 0, so that no underrun occurs after releasing the state machine */3 R3 n8 `' M- k( @1 t& k
    mcasp->regs->XBUF5 = 0;
0 q) o: ]/ S, ^1 J, w    mcasp->regs->RBUF0 = 0;5 J: ~) V$ c; N

0 J$ |! d$ v$ [    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 [7 x. {$ Z: s8 I, j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& R$ o* ~( A" @8 E
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) Z4 ?* }, l, J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 V! z4 r$ {. L; K# Y, s: c, \5 d
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 Y: A" U3 j+ T  X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- W3 w, N+ f0 _: U$ k
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 f, N3 i4 r! ], |; D- G" D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ L! v. c6 Z1 n: x  v: Z
* _; h' d. Y1 h- o) ~  v* V8 w
    CSR = 0x0000;
1 D9 `3 ~& R# e( P    INTC_INTMUX1 = 0x3d;
0 B+ F) ~* e. ]) P2 E& K    ISTP = (unsigned int)vectors;
$ C" P, B9 @' t; t# r    ICR = 0xFFF0;  ) G( E& C+ m. W- C
    IER |= 0x12;  
( Y. J0 Y0 ^5 z    CSR |= 0x01;  
( p* [( p; P5 A3 r( n
+ B; k) j/ R8 V, h# h% b' z# d
/ j) @( g- e6 U8 ^+ |  e* C6 M$ ~
, W2 |1 J6 D; m* y+ X2 ]  ~. l# J还有就是两个输入输出函数:: U3 q% B/ `. u, g1 j# q
void output_sample(Int32 out_data)
/ N1 L' Q$ Q8 q7 [2 V% H& W{+ x. V0 b7 \. `7 U' R
  AIC31_data.uint = out_data;  8 B# S- D) B  [) D
  MCASP1_XBUF5_32BIT = AIC31_data.uint;6 O' s* ?  L. S9 q/ J" u% Y, {# B% {
}5 r5 }; Z, m$ O+ S$ o, \5 ^
/ N6 {* B) ~5 A: N* S. p
Int32 input_sample(void): y. Y* {" w( N: W  |% D
{  
6 q% s4 o0 i+ [  AIC31_data.uint = MCASP1_RBUF0_32BIT;" X5 {; b/ d1 M  a+ V
  return (AIC31_data.uint);( W0 P9 F% D- F  l) n
}
7 e: h: g* g) A! N7 l6 Q7 L& G) u, {! k* Z4 S% \
分享到:  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-24 23:19 , Processed in 0.038367 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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