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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ O( m. u; _" f- C5 e
main文件:
6 ]2 e( t! F% A  |/ J7 finterrupt void interrupt4(void)  
- A. z5 [  d& Q9 ^+ w+ g% j{) H5 K/ U6 I4 b0 t3 l
  Uint32 sample;
2 k; r# p/ _$ f( V1 m, J
- o+ L9 H+ N! p& X* Y  sample = input_sample(); // read L + R samples from ADC. W$ M+ N% H& j  x2 e/ `* E
  output_sample(sample);   // write L + R samples to DAC 7 A% \3 [5 W3 [0 [
  return;
" ~; T1 f$ U1 g- W) J! i}& e: {& J; a- X) P( l/ V( i: a

4 S, D$ c) P# K1 V% G* @1 P, Mint main( void )2 P, x3 W% i  _6 Z
{
5 j$ G% K. r( ]' L4 S. T
* F; W4 ^1 t6 k9 m5 b    /* Initialize BSL */8 O' L2 f- \2 S6 g" ~
    EVMC6747_init( );
# x4 T5 q( [2 F$ h) [        /* Call evmc6747_intr function */2 F; K# e; S5 L8 c& K1 [
    aic3106_init( );
2 Q- I6 L* y) o" v  O" A        while(1);# O( }) H: p! o( l* z, a& ^
}8 @: |2 j' H! M( l- |) [; l
9 \0 U1 F  \. d6 m* X

+ l- W/ m6 |. [7 K5 E  Jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* F* u% ^/ q' n1 R9 |/* Initialize MCASP1 */
+ i% G& j1 G2 I; b$ n' W    mcasp = &MCASP_MODULE_1;
1 M! S& F) u* x2 H. i$ {$ _    mcasp->regs->GBLCTL  = 0;       // Reset
! F5 e. `/ [% N1 q/ k% e! `6 P& v    mcasp->regs->RGBLCTL = 0;       // Reset RX
! C, P, ~. L* ~    mcasp->regs->XGBLCTL = 0;       // Reset TX
. A' E4 J8 ^2 t: b+ }) C    mcasp->regs->PWRDEMU = 1;       // Free-running2 V( P3 D# W! _) L
   // configure McASP0 receive registers
2 Q  E4 {7 }! C% p" h: Y' c    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used3 H0 q) O* p8 z! Z2 q- P
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 G$ F) H) p3 U4 |$ K    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' w! e8 G3 `' V) L. e' P1 r    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ v- Z& O  c& P' ]. u6 i    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
6 F( g% m* G9 Q. P9 d    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
* X! R' I  J8 S/ e; B    mcasp->regs->RINTCTL    = 0x00000000; // Not used
0 Q8 m2 X, f3 j8 N1 p    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* v6 C$ U& I! B( J
" N9 P* n* N1 ?. U' F$ p    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* p% P  f5 c8 A( m    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ |9 g) u6 }+ k# J2 v    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 h4 K' s2 M1 w    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  L3 L  j' P4 q0 b9 V    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  q9 e: r; ~& D; k) p8 r
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1- F& Q" f8 Q5 `( _  j
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" V+ i) ?/ G  J' a    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, g3 D3 O7 X7 @/ `) p" a. \
/ i" x! h  _% O3 \& N# T
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN% ]* h$ C7 M) Z
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT! i$ x7 L7 S- _7 g) V
    mcasp->regs->PFUNC      = 0;          // All MCASPs0 Q, g2 [* p: J7 n1 g& d2 E$ U3 H& R
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 y: x; _: y/ f/ E* Y( `; ]

# ?: W' X7 b: x) ]+ }. s3 V    mcasp->regs->DITCTL     = 0x00000000; // Not used2 C* [# k9 _) z8 v2 O
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
- i) e  L; M. ^* Y* u; x( e    mcasp->regs->AMUTE      = 0x00000000; // Not used
; o2 s! n* Z5 |" D
1 D- }0 y1 o3 t# f: s+ V  f5 {/ I/* Starting sections of the McASP*/
7 F2 x" @' g# P2 {1 ~    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 \, D1 V3 G8 {& K4 U. c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  + r- |! C9 ]* t6 V: ]
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. O6 U1 V( N, R+ o7 }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ U% \/ U; X5 D2 d7 Z

5 x" C0 q& p- ?    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 E, E& `; _+ Q5 N0 {5 b: L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 t/ N) e5 Q6 ]* v" V% a- G    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 z- Q: J1 D2 b& E0 p% A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" a5 W; U! L5 B6 I+ X( @/ P3 L3 A5 W
- R* z- H0 K7 {1 a% b/ M    mcasp->regs->XSTAT = 0x0000ffff; 8 w! H- ]4 t# E) j4 l1 N3 `+ N# {
    mcasp->regs->RSTAT = 0x0000ffff; # k. ^, D6 n9 ^% Y$ K+ y
8 {, D! M% A4 b7 p
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 d9 _3 |# A" c+ O2 f; k7 V; k1 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );( N* t# D' W+ s/ j" r
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & J, f3 }0 ?) F, z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 i  c$ N. v$ N; A5 S- m# g* ]- ?0 @) S* o
    /* Write a 0, so that no underrun occurs after releasing the state machine */' `) J% c) P7 o  n
    mcasp->regs->XBUF5 = 0;
, m! a  i7 L  e" f2 \3 H. L# ~5 ]    mcasp->regs->RBUF0 = 0;
; V0 ?" C  I8 L( e% s8 a; W) j0 {; u
; V' }0 _" m% j# N+ e8 b    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) W4 z% |7 R+ p3 N0 R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 h$ f( Z& a8 E
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * N- z( W7 a& f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% ]; o* \% `$ E9 ~* h5 ^" @' z  s7 {' g4 m) w$ s% j5 o2 @
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' a$ ~5 v4 Y& x; x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( Y/ T, g0 i0 g: t/ x1 w
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 E' r) c1 P6 ?+ q9 Z: h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, e3 n* J  m4 l, V4 {. L$ x& A  [2 e# N6 }- ^
    CSR = 0x0000;
; m# ^# c/ G/ O; F    INTC_INTMUX1 = 0x3d;
  t- O; `) I+ E/ n. [    ISTP = (unsigned int)vectors;/ R* O8 I9 t# P5 I) y$ E6 b
    ICR = 0xFFF0;  1 M7 e% s7 y4 b
    IER |= 0x12;  
& C$ P4 ^/ ^; E. R- U) k! o    CSR |= 0x01;  
4 W: t1 a6 b* T! x8 ?7 R2 V: z  [2 _  O2 P0 b
. |  e/ v* m  V$ I3 V1 x
( }" N+ ]' H. w$ A
还有就是两个输入输出函数:; E; i$ i4 N, @* D3 A" r
void output_sample(Int32 out_data)
3 k( h% [4 w( j{5 a" ?4 X# r! q. `8 O: P
  AIC31_data.uint = out_data;  
- Q3 i- g, l/ D; u1 o  H3 U& D  MCASP1_XBUF5_32BIT = AIC31_data.uint;- }6 u) X5 I2 x- Q; n, q
}% H9 h! `7 H0 O! T1 n
( K* G; d# S2 V" ~' o
Int32 input_sample(void); H3 `5 o/ H6 i4 e- v* e8 D
{  
" _6 K' T& J+ ?: w  AIC31_data.uint = MCASP1_RBUF0_32BIT;3 D/ r; \# K8 t3 q8 l
  return (AIC31_data.uint);
6 V! Y+ Z# z% j& s, o}) J6 J& G2 d, N7 h

9 ~6 ?( x; n& [
分享到:  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-3-11 13:38 , Processed in 0.048815 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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