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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ G8 b9 K% e' r& X5 s7 ~main文件:
8 z- J2 w0 A& f) y& U& binterrupt void interrupt4(void)  . ?5 T6 \' M& G$ E
{. g) W% d. C8 Y9 a3 O: J8 D
  Uint32 sample;$ q5 V6 q" B1 v- v/ r. x

$ l: A  K  C" @! ~  sample = input_sample(); // read L + R samples from ADC
- O- z: d' J7 E" N7 w  output_sample(sample);   // write L + R samples to DAC 4 G+ {$ v7 m% B# Z1 a
  return;
+ ?+ m/ N3 q8 }" v" j}5 A# X5 T( H( p8 f
: B) c2 y2 y+ v! N$ k4 ?! |! P4 m: @
int main( void )
, l5 [0 K; t: B, h) o{
- I* x" t4 }1 b9 L, T8 w! t0 m7 U/ S% ]1 {, ]
    /* Initialize BSL */6 O8 l$ Y) q& M: y% x5 i
    EVMC6747_init( );
+ u% T: d; f+ q. e7 g/ J: M7 M        /* Call evmc6747_intr function */. }. B& }& e! [$ j
    aic3106_init( );* d3 Y9 c# d) N8 H* x4 _9 f
        while(1);" l/ a  |, P2 t6 k. \9 B$ z( d
}
9 D+ i* ?- j! w3 z3 x# ^. V/ q4 }1 h2 p1 Y. H% [7 C

0 S. n- \$ ]: B& z7 P7 {aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ `8 ^* i0 Q5 Q! e) Y2 v/* Initialize MCASP1 */9 Q: j! g: b! [# W7 B5 B
    mcasp = &MCASP_MODULE_1;
1 p8 B. h8 v9 v2 a; V1 ?; }; N( G1 |    mcasp->regs->GBLCTL  = 0;       // Reset* O& x; W2 @3 Y5 q' s% h
    mcasp->regs->RGBLCTL = 0;       // Reset RX
* L4 s6 U0 d2 {- p) r; r2 t4 P    mcasp->regs->XGBLCTL = 0;       // Reset TX9 H0 h7 v! q: ?( y7 B9 O
    mcasp->regs->PWRDEMU = 1;       // Free-running
; I2 Y$ N8 [8 u   // configure McASP0 receive registers: I# w* @$ L" Y& @9 Z
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
* B! C, g' X+ t% j% q7 k    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" p0 F$ n( C+ R( f% H
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word& B; [4 D% V* D; v& }8 D
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ U: R  g/ d% s; E
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 s/ h# M' {/ X5 Y
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
! o7 ?& N+ w: w5 p4 k6 M% Y+ O5 _' U    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& q8 y/ {4 g2 V' z- h- c    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 [1 c( a1 C3 I5 D0 T

2 r5 D; x9 G  `2 N) D    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
! j9 ?, w) x# a; G    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ n  V5 R: A/ j6 ^
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 H! i/ G2 f0 [" I1 ^    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ g& `9 K) W# r' H
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
+ X7 h2 X) y) ~% Y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 B9 B% j6 p1 g- N4 p% X, ^
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 c7 M; D+ j& E; {. j    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* z5 B* C' V3 o. y7 M9 ^+ B

% r* q3 r  \! r3 e+ R+ ]    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN6 P( G4 Y6 b1 Y  U+ E) T- [
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
  U! @! q. w& |7 ~, P    mcasp->regs->PFUNC      = 0;          // All MCASPs
" o0 `& C. \7 p* A8 i, e  l    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ c( b+ e3 d9 Y* }1 B) o$ b$ U0 M' u- w" ^! q
    mcasp->regs->DITCTL     = 0x00000000; // Not used3 A" A$ }' v" H& s( d( U
    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ ~6 f  m( @4 A/ d4 o) J! r4 p$ a1 q
    mcasp->regs->AMUTE      = 0x00000000; // Not used5 s7 {- Y7 C! w  q/ u0 Z, U
0 O* C/ K$ o4 A( o" U" Z
/* Starting sections of the McASP*/% c# J1 u# ^% b7 d7 Z# Y% D
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ G4 Z, g2 u9 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
1 F" z' {9 w) X$ q3 H7 c; L2 h7 V    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ D. b! ]* Y9 O5 r5 |2 J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& \4 W$ s2 z" X9 z5 S/ e) O- K
/ e7 q- G  D' K' O" E4 @' x
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 y8 `2 P6 d" d! H/ ?% Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, t; f- X3 s5 v( o& n( y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 @: ], Y5 `& L- p& Y$ S9 x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 ^- \7 a# s: T$ K- s  d5 K% t5 \6 k7 P1 T  _" {0 E
    mcasp->regs->XSTAT = 0x0000ffff; ' Q; P6 C- S# N) _( X" k; o) t
    mcasp->regs->RSTAT = 0x0000ffff;
$ I; k# g- h- u2 p( W5 `1 E9 {% u7 r
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! M0 D, d) U+ ~( t  R+ n- [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 N2 `4 q+ n0 [7 K" B  S1 y    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 Q/ O- v0 [- i6 A3 _. s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 v8 p# w  `& r
$ l% e5 _# ^& B0 |    /* Write a 0, so that no underrun occurs after releasing the state machine */2 o. o" E. R* p' Q
    mcasp->regs->XBUF5 = 0;" B7 q; c: t/ `+ N6 z
    mcasp->regs->RBUF0 = 0;
% _  Z! |6 _1 d9 i0 F$ {0 a0 P6 O. G/ z$ i$ n
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ u8 V% i. a+ C" d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 ~9 U  h* [/ F4 J    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 t+ z6 U$ s/ _6 N# `. T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 o/ K% q+ P' `! z; H+ W$ k0 ?

7 O3 ?3 K6 y5 H: j4 @    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 ~3 M! A3 T, P" k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ K) B- N6 D# X    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 K& _0 ]: o! ]' A, s: R4 [% B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ m6 z2 }) A$ j/ A9 }; x( X) x
$ A" z. K: A) b* F
    CSR = 0x0000;
( N0 z0 t- m/ {/ @  i! E4 H    INTC_INTMUX1 = 0x3d;8 g) e6 W) r# i/ x$ M( x& z) W
    ISTP = (unsigned int)vectors;+ {6 A2 E; T6 S5 J" W9 y+ A# R
    ICR = 0xFFF0;  
( k) F9 ~/ h0 `0 q) B. f    IER |= 0x12;  , F6 |, Q% P* K$ D
    CSR |= 0x01;  : t0 L- d) _% O/ D( _0 `/ A! r1 H
' m- ]# l# B2 K; F: v6 i& |

1 W/ @" t/ M# v8 Q4 L- N' K4 n/ u
还有就是两个输入输出函数:; f" Q9 v3 k% e$ S2 d: \# P
void output_sample(Int32 out_data)3 Q' R. A6 R0 c3 T" b* Z- C+ t+ h
{
% a0 q0 N" u' O5 K& f; T  AIC31_data.uint = out_data;  ) M. P: k' P0 I& p- Z$ Y! P
  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 q, m/ F2 L) |
}
( G7 S& z+ g  r0 e* c, ?7 n
- v9 ?, J) Z) V. X6 e; AInt32 input_sample(void)
' Y* `& b' }3 P; C' T* y{  & M& ^' L& D# R0 y2 W
  AIC31_data.uint = MCASP1_RBUF0_32BIT;: E9 O* l, L5 x* J. K1 M  W) p, F9 M, p
  return (AIC31_data.uint);4 V* W# E$ C( N# l
}
8 l6 ~1 v: h( P% o8 ?0 j0 M4 T! [! b! |. T
分享到:  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-17 07:38 , Processed in 0.038948 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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