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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- ?; G6 H# Z* O4 H" j5 o  a; E) f2 p: Emain文件:6 `* A# g9 Y, u0 p8 b: `! R% q
interrupt void interrupt4(void)  
' P0 F- b3 u6 C' x{  p5 H$ c; s' V7 r- ^
  Uint32 sample;
# C8 A6 k; ]! l6 R0 G9 f7 o% k- i' ~5 C2 u7 ]- @
  sample = input_sample(); // read L + R samples from ADC* u2 e# W$ N$ e: ]! T1 E
  output_sample(sample);   // write L + R samples to DAC
0 Y& N3 r9 Z- Z, c" _  return;
7 b% r, J& t/ P6 b. o5 }}9 L  ^' T" e. G2 G7 G, ~

5 s; {+ C5 H2 K4 l0 \! }int main( void ): i$ ]- E- W' J8 K; B7 a
{( q1 ~  L! s5 f& m: T
# H! p5 X6 B! A# E4 K1 V6 M) W
    /* Initialize BSL */
) y& |( R' s' I- @    EVMC6747_init( );
/ }& e% m9 Z# z9 t4 a+ l        /* Call evmc6747_intr function */
: L2 R; ^) z- J- L& `    aic3106_init( );
$ x, C: |9 W  K' ?" O( X        while(1);- G% X  F! n0 Y4 Q+ @2 q
}! d2 o# J. Q' j) a, Q0 U8 K

3 x  O9 q* `3 g; |+ _+ K  F! r; m' @5 ?! L
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 V" M& {" f- _6 J5 c( V/* Initialize MCASP1 */
' L* o3 ]& a2 D! l/ d: ?6 c( g, D    mcasp = &MCASP_MODULE_1;
' B2 [6 J, d( l0 h    mcasp->regs->GBLCTL  = 0;       // Reset3 S' i. P5 l* ~5 V! v% }
    mcasp->regs->RGBLCTL = 0;       // Reset RX2 ~3 E; j+ o8 T) b; Q' g
    mcasp->regs->XGBLCTL = 0;       // Reset TX; U; o/ Q. j  v$ g  _0 V- v
    mcasp->regs->PWRDEMU = 1;       // Free-running3 Q2 J. J* i! {+ L7 o0 q, k
   // configure McASP0 receive registers
2 O8 ?. _- b, k7 E9 b; z. I- N    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
( p" l/ _" \( T# J, t    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 B  k. t0 [& ~/ N2 K$ J
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' E3 L1 c/ H; n6 n    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: [* R; ^0 x! R    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
9 y$ g! j$ A* `4 ^1 H2 c: S/ T    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1. M: V% G; [. n; n- n% k
    mcasp->regs->RINTCTL    = 0x00000000; // Not used3 u0 v! o6 o% y& F1 o) _# {: _: ~
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! T! `$ |7 V. u3 f1 y4 u: n$ h) l
# D) \. s6 X1 E" R! q! t
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
5 z+ \4 x2 O& x3 _- Y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- C$ Z/ C3 n2 [+ `& D7 k; v* I* |
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: L( Z- R; m4 a% s/ V2 t: R
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. I" D# Z# n' E
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* l/ Z, u6 q# P0 N* L2 \1 s' z
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 G+ V4 T7 r! @% P( {1 v
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
  L; U6 y* o  x/ m    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ s, ~. @2 y, O; X: W7 J5 d, G# P' W1 `: U: |$ b
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
; W/ R- c  e# {    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 l2 M7 M. d% r( w9 e, `. t+ H! ?
    mcasp->regs->PFUNC      = 0;          // All MCASPs2 G( {0 u2 d8 b, H* W8 [5 L' M  h- V
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" t6 y( {5 Q, e
4 e) e5 K3 [, v( D    mcasp->regs->DITCTL     = 0x00000000; // Not used
* p8 U+ @& F* O% ^1 ^: f% E% Q0 c6 H    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. S4 f" [$ b! J    mcasp->regs->AMUTE      = 0x00000000; // Not used- {3 w! w2 {+ F0 v  ?( ~0 K
8 P5 F4 r& g2 A  h9 c
/* Starting sections of the McASP*/
+ I( k" c, m7 {    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 a, Y# S3 S8 l5 T( }: `6 Q$ P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 z0 J+ F7 O7 D! {( {7 s4 Q    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 R* ~8 c! e; H. n- Z+ z. H4 P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; o7 C+ F0 M' @: N  y- V' l2 I! ?, U
$ X/ \- e3 ?. Y! N: P$ j    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 s; |) m% K/ u6 R/ T$ E( }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 D3 |- B' \5 e' N3 |
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( a! E% _8 ]+ h& N, c! n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ y: S7 f! }. p* E  X4 s" |0 J% U. c% F$ [; i
    mcasp->regs->XSTAT = 0x0000ffff; + W; h- m; `8 Z7 |" I4 j4 s
    mcasp->regs->RSTAT = 0x0000ffff; : |+ j- |% e. V$ Z
, }. D* R/ G9 G/ _/ U0 V1 [* E
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' T% I! K0 C5 f. {" I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% H4 D# i' q) V2 V  ^    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' J" n- e( u3 \  {2 I* M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* z6 }: F) h4 }& S* a; i. z3 w4 w- C8 u3 S' s7 i0 d! }, B
    /* Write a 0, so that no underrun occurs after releasing the state machine */
! y# l9 x( w6 F. Q. i- D    mcasp->regs->XBUF5 = 0;
( r0 v3 V; L- H% X4 S9 F    mcasp->regs->RBUF0 = 0;3 p7 D& F: d/ H1 u2 K' E( X; E
! V$ ~& C& |2 \& b  Q$ l
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ G8 _7 b" T/ F( y8 m3 P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ i2 O/ j( E/ Z% o9 `, |
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ t* e; N- z, c; x  H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( [3 E  a  \5 f+ E2 T& d+ }% s# Z% g6 u/ G' [
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % {9 E# T' [, e# w  L) F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, k% _9 T- ?5 M! t3 u" B
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 ^- U* A) Y/ k' U5 h8 P6 U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# N  t8 U7 {8 s3 l5 U% R4 U

1 |, t/ r' w9 i# y+ e, _9 J    CSR = 0x0000;3 X( D- O' n9 Z8 }2 d5 j9 ~1 T# h
    INTC_INTMUX1 = 0x3d;
$ b" X0 r8 X; L8 D( }    ISTP = (unsigned int)vectors;5 N% d4 @% E! f% g* \
    ICR = 0xFFF0;  0 h: w( [7 j: U0 O- E2 g5 c: ~
    IER |= 0x12;  
( i( f) J$ O) I. @$ v" d: s    CSR |= 0x01;  - s# `1 N" V+ I9 Y8 o) e

) ?# ~( s6 b8 w6 ^; w& O, q! i
# N5 x3 ^5 d5 H# R, R2 r8 w
* B7 S2 W8 l/ ?; P; C  [还有就是两个输入输出函数:- B2 U0 |' d" r6 P2 i" a: K" X
void output_sample(Int32 out_data)6 U% B9 ^6 [/ Z, |& D
{
9 {& Y9 l! L  a& q" C4 W9 q( C  AIC31_data.uint = out_data;  
9 a7 c- H0 d# J: |  I. X  MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 U  ?; e) F. l}: L$ e! a* i3 r/ S3 f8 e

( B6 H  r0 @8 ^3 rInt32 input_sample(void)) A" U# e+ n* B  ]# e; K
{  8 \/ A( [+ B; Z+ A5 Z
  AIC31_data.uint = MCASP1_RBUF0_32BIT;; U" j1 m, S% i* T, m# C6 k
  return (AIC31_data.uint);) o# t! ?- l9 h/ [
}
" b4 M) s% d) y  _2 v2 U2 y
0 S/ h; M4 N- m# w' x+ r
分享到:  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-9-16 17:04 , Processed in 0.038010 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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