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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! `% D& b7 x% ~" S: Qmain文件:
- }$ ]: @* |4 ~1 u  I& p6 Pinterrupt void interrupt4(void)  
- Q& Y; P) Y' `! q8 v{( ~. X8 n# L8 p* T' w2 z
  Uint32 sample;
1 T2 w! I( W8 j5 p1 t; }1 T$ M/ G0 C2 ^' q7 Y4 h: i9 M' j
  sample = input_sample(); // read L + R samples from ADC9 x" P$ f/ S6 v- B0 {  V  B
  output_sample(sample);   // write L + R samples to DAC
- o9 `  Q/ l- D2 t. H( o0 N4 M  return;' ], j0 x+ H4 }8 n+ T3 m
}
- r- t& x! P0 |* v( b! m% L- _5 T$ S+ B! r  Z: N/ w
int main( void )
& j/ [( F+ c) \$ A{  v$ p, e  t- N" t  m' y

- ?- T4 u$ |8 s# H    /* Initialize BSL */- R; Z" J0 @+ D: V& O) [% o8 }
    EVMC6747_init( );
/ d& q, a/ X! W        /* Call evmc6747_intr function */
! K; V% D! q3 x/ R" |* ^    aic3106_init( );; C3 z/ i  _3 c5 _
        while(1);
, l( t3 |9 D9 q( w4 n* X! m% _. z  w}/ j6 ~. X- T' K

; p# j/ C- w% `! e6 L6 ^+ Q, c" L
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' ^$ G2 L/ M" }9 i( P: R
/* Initialize MCASP1 */
3 P2 U" [& i% g+ ^    mcasp = &MCASP_MODULE_1;
" E9 I! i7 E$ d! c    mcasp->regs->GBLCTL  = 0;       // Reset
( D& [/ ~' x- s8 q# }$ _    mcasp->regs->RGBLCTL = 0;       // Reset RX! X' u+ C0 n" ~8 A% n9 o
    mcasp->regs->XGBLCTL = 0;       // Reset TX
0 X! L" L$ Z3 ]! ^, v  g7 K( d    mcasp->regs->PWRDEMU = 1;       // Free-running
) f% J# p" u7 b   // configure McASP0 receive registers
! h; k2 ^1 ]/ m+ U) Q$ ^& z2 N/ ?    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: T( ?( d+ ~& b  \, s
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ G% h( _8 H5 \    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 x0 g) ?7 n% |( \& M* n. _
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 F+ g! V9 c; J1 r
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
' G- F1 C: G; I1 y) y    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- `! x% y" h; z1 w
    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 c9 l. y! t0 M) ~. e0 u' d9 a, P
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: U$ k* q4 C3 S  w# v

4 m% O8 q$ X+ Z6 X5 E3 k- S5 c+ d; V    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
9 u! X. W( E! k8 n7 W    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 n4 A/ E+ m$ f; T4 V1 \3 s    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 ^% N8 o% p- Z$ r1 W( Z5 k    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! ^' k: L; s5 N+ j% z    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK8 V( s7 Y' ]$ n6 n' Q
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
+ |; z  F2 d1 g    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit1 p2 d3 L8 q' Y$ V. W3 P
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- X1 @) _9 k$ h
9 w. t: E0 k2 F2 a    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
# i8 k! u! S% S7 `( `    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT: K, d: e; g3 F3 j4 L$ I' R+ z% Y
    mcasp->regs->PFUNC      = 0;          // All MCASPs
, E7 P7 j3 Y# `" ~" x1 a    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( Y: W5 }5 S: G2 D1 R! l9 P& b* ~/ _& T" }1 n1 f* @) ?! l
    mcasp->regs->DITCTL     = 0x00000000; // Not used
9 x; p5 S) l% j8 }9 q    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& `7 u; C$ i5 `( _" c9 S9 N6 H    mcasp->regs->AMUTE      = 0x00000000; // Not used8 Q3 d: [$ l: D2 u6 D( K) ^& i
7 n0 T3 k0 i" n: n2 B
/* Starting sections of the McASP*/5 F$ J7 S' J" b7 E- w. s
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 y1 |; l& ?  q# C" m/ A, C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
, x+ ]6 H0 _+ |- q- k! ^! ?    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * E& F# |6 v" ?- f3 ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 d' c$ @, A3 o! I, ?8 `# ~6 W9 ~7 O1 t! O% E+ [8 ~: ^
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + ~0 g: G6 G" J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 u- V3 Q4 i+ q8 D: Q4 D
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' E. p/ _" I$ X: }$ n, r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( o1 K( B  v" {0 P, y
$ [% x6 t/ Y. w: D6 i  ?
    mcasp->regs->XSTAT = 0x0000ffff;
$ S. O% [# O; B. a    mcasp->regs->RSTAT = 0x0000ffff; 2 ]8 J& N: G1 e

8 t. ~0 e3 q. C3 I    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- S6 Y  A) d7 Y0 Z3 R5 U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 S  g0 w1 H1 }8 |: ]! a4 I/ x    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 T, J2 M, G: E6 X) i2 q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 h6 Z% K* t2 @7 d6 e

. o: i. c8 P% }: s$ w* H' B    /* Write a 0, so that no underrun occurs after releasing the state machine */
  M0 B0 ]- ^9 E9 g    mcasp->regs->XBUF5 = 0;! P0 k  a& f( W8 D
    mcasp->regs->RBUF0 = 0;+ Y- k. d! t0 t# ?/ x! O! @
5 ^& |( r/ @1 C+ p8 i  T( N( |+ l
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   z5 n* j6 {& }; [$ u: {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& y3 O& b% s8 W' G' x
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; |6 |- y) c: r# s% T6 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 e. C+ W! r; f
5 U$ X8 ]# Y  P6 q- `
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! k5 n3 x. T- j& C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 ^6 k& T* ]# @( {0 x
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 I* u& L5 k) B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 C4 x2 q  M7 {' k5 _$ j/ \
6 e# s# u7 N# t* r- p2 `( {    CSR = 0x0000;5 ]" Z8 e9 d/ W
    INTC_INTMUX1 = 0x3d;
7 I# g% t2 q% q3 S- c    ISTP = (unsigned int)vectors;' C& {7 X9 ^1 a! D  E9 n
    ICR = 0xFFF0;  & H+ S  t8 l1 `2 z
    IER |= 0x12;  
/ X. t! p9 U! O; }    CSR |= 0x01;  
2 Q4 O- n4 h7 ~* I6 E, z
, k2 A# \) A/ v6 Z/ s; v$ |- u% p8 p
4 g& W* M+ m. M* p7 M9 d4 p% L
还有就是两个输入输出函数:1 m3 T+ S0 a- x9 L
void output_sample(Int32 out_data)
7 O1 |0 k* l8 h, a{* m* h7 u6 i/ X1 Z
  AIC31_data.uint = out_data;  ; }' B7 E6 x! u6 Z8 R( v- y
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" @2 ^( \/ ~' B: t' ?6 f# `# k" x}
( {, B* Q2 K( d* t+ {& J: W
, H; ^0 i' h3 n- e) K3 cInt32 input_sample(void)
. E& T2 r9 Z" L3 L2 e$ a* y{  , w# t4 y- A; K9 Z
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ y7 c& B5 E. n5 h3 y  return (AIC31_data.uint);
; [. o7 K9 O1 s% b; I  l& a. o/ j}1 f/ r' R; V4 v5 ~$ f" I4 x( p
' g5 z6 u% a2 y0 I$ J( ~
分享到:  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-1-28 02:15 , Processed in 0.039967 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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