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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. I  y& Q* f! T8 X5 K1 b
main文件:
" s7 \6 e+ [' Qinterrupt void interrupt4(void)  
! r% e+ ^' ~1 z$ s# ^6 j{
. }) q) h+ c- P. O  Uint32 sample;* J( x. X) l5 V

7 ?& p- I' D6 I/ ~% N  sample = input_sample(); // read L + R samples from ADC3 h( f: z( h3 v! C$ B
  output_sample(sample);   // write L + R samples to DAC
; _' N! J# x+ B9 n7 T6 `: l  return;
2 O0 I( G! Q  Z: q}
) f0 e9 Z3 m  @/ E. [7 J: G) F% Y% L4 c3 h2 ~1 E
int main( void )# o! J! o/ H( l1 j8 z
{2 e3 n1 i1 t0 B/ J, Q  }( k

* ^! Z, I: p+ [    /* Initialize BSL */% W8 P6 m, M2 w5 l7 e4 H' p
    EVMC6747_init( );
: A! D" K& b' {- I1 y# `- p        /* Call evmc6747_intr function */
* I. r. X( d6 |( n# _    aic3106_init( );4 w7 @' [4 P1 i& R7 R) @! K1 O
        while(1);. c) p% z( K: @+ ^+ M, b3 ]# x8 }7 l  h
}/ i% N, r# F: D2 O1 N* h% [
# m& y/ g6 x( T; g2 O7 O1 c; Q
( N4 w( \; Y5 p. F
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 t- m  t" m& l) V8 d9 g$ V! z
/* Initialize MCASP1 */- e1 q5 P( A5 R8 v* u7 e9 V& o' g
    mcasp = &MCASP_MODULE_1;
/ S6 m9 R- T- S# T8 z3 H- ^    mcasp->regs->GBLCTL  = 0;       // Reset' L: H# s2 e8 E& |5 G7 t8 _2 w' \
    mcasp->regs->RGBLCTL = 0;       // Reset RX
% \0 y9 A- ^7 n& ^7 h$ H    mcasp->regs->XGBLCTL = 0;       // Reset TX
! g7 d6 v5 J" F' P' ?4 H) `0 X    mcasp->regs->PWRDEMU = 1;       // Free-running' d+ {4 b9 }& [# X- X
   // configure McASP0 receive registers
- \6 h6 ^0 V0 p    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
( z- M' v& J( L. A& `' J    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ S3 o% y" O0 e( N" m6 S; ?
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 \3 @  v! {/ }% B: v    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- i8 P1 ~. E0 m1 ?    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)9 Z/ N0 P3 j" G! g2 @
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
! M( b1 a, {* q% \' H9 n    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& d2 f/ \% a4 l# y& ~! {    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ p5 r" z4 Z+ t" g& T
" S* b8 f/ N3 E9 j# S    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
1 d. N5 \: V& I/ x9 d9 S$ v1 r    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! R/ ?( f# J1 Z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; s. I6 q: }9 ?3 I4 Q. u  }
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; P6 H; v% X8 f8 M+ a9 {    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* E" R# ^/ f0 ]) p% o) {6 u) J
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
) ?+ R& R5 g$ |+ a6 u/ u    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
9 J# B! `9 K, }) r* ]) f- X    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 j6 T* s/ R; |8 o
  N" ~9 g/ e8 e* W0 Y5 E! R    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN& K% R) q, }' e( _/ V& j
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( B( I# s' b; R
    mcasp->regs->PFUNC      = 0;          // All MCASPs
8 {" C6 n3 m: J5 N    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 a/ q. J) @3 O7 l5 p" R" e

# c6 L% f" ^; O- \6 p5 S" F5 G    mcasp->regs->DITCTL     = 0x00000000; // Not used. t' b, H7 [. x, Y# \
    mcasp->regs->DLBCTL     = 0x00000000; // Not used1 y$ @( [' m7 O4 `8 Z+ z4 r
    mcasp->regs->AMUTE      = 0x00000000; // Not used
2 k# V" a9 `: h- m5 E
7 i  L" P8 ^% v0 Q. [/* Starting sections of the McASP*// c2 w/ w7 i. q
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ j0 z8 b3 k0 Z4 b6 _. S3 f: I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  5 b7 l2 u! _6 Z6 a1 C1 N
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ [: o( R: ^# K9 H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 C" y# ?9 U1 V, T1 j5 C& C* u( r& n( H
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% G" L; x/ N2 o6 C, k8 {) S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 G1 ~4 u. L) I! ~* w/ N, r
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' ?5 _1 N3 l/ I. a" u- U" h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ A( Y2 Q# A- Z, X2 k. n9 ?" a$ G9 r, W: l9 E  Y6 m6 p
    mcasp->regs->XSTAT = 0x0000ffff;
7 p: L& K1 {6 S8 w2 y4 f  L' g9 Q    mcasp->regs->RSTAT = 0x0000ffff; 4 E) G) ]4 h' V* \& x

4 Y3 _7 m! Z3 _    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 E% ~2 g+ n0 w3 W& S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 A* d, Z- R) R  ]1 B4 z6 g1 F
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 K$ S6 |8 l. F, [$ Q4 D  F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% _+ n4 [- c7 \' X; A; i# Z. t% c7 d) s
    /* Write a 0, so that no underrun occurs after releasing the state machine */
, K+ L2 j& v+ ]% j: O' O+ U5 M    mcasp->regs->XBUF5 = 0;
0 `' S5 {. J1 B- s+ s0 Q. c( `  y    mcasp->regs->RBUF0 = 0;$ q" d% B6 J/ W8 ]) H2 ^

0 S9 n% V1 h8 v/ M; Z" l) v# y' g7 \    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 k# q0 o2 D9 M" F/ ?# l+ K" o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( y4 Y5 j9 o, ^) U' g6 t8 ]9 H9 m9 o: W! O/ Q    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;   r1 W) P& T7 z# Y9 H7 g) l! ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ c: `8 L$ z6 Y" h0 t& U% D4 W
6 j& B1 D8 o' j) E# b1 a
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 t4 u) ~* \, M' G3 g8 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! E& j+ j9 P0 ?
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 A7 }) T0 M& u. o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 D1 b6 e; n- T, \6 x/ P0 \  t8 @
    CSR = 0x0000;( y$ v7 v/ o1 L
    INTC_INTMUX1 = 0x3d;) s# a  r1 K# N6 |
    ISTP = (unsigned int)vectors;
6 |/ `2 _/ J8 y) T    ICR = 0xFFF0;  + _2 v" L2 n$ D  a  @8 Z
    IER |= 0x12;  % \7 j$ k5 |2 [0 L
    CSR |= 0x01;  0 e$ G5 C' N( F0 m* l4 J2 x0 j; Z0 Q. `

* B3 [" q  R4 n1 u1 e9 p
7 R. W5 _, A' r( S+ q7 y1 a9 e% ]1 M8 O9 l
还有就是两个输入输出函数:
" H- k. B; S' G3 R1 Evoid output_sample(Int32 out_data)8 i* Z: @6 |' @
{
: n! s8 C9 c3 t( b  AIC31_data.uint = out_data;  
6 J! {% |9 g1 b( b  MCASP1_XBUF5_32BIT = AIC31_data.uint;
' X7 W! l% F4 o, T4 j- X. L$ U6 ^5 b% ]}0 s( H: h+ _: h' M, n3 p

+ ~- q& o$ N7 z) mInt32 input_sample(void)% h. |, ?+ J" [4 \2 `' y; R
{  
: D4 w9 }  f7 ^+ K  N( e  AIC31_data.uint = MCASP1_RBUF0_32BIT;
! l& |( C  Z  T4 E; z  return (AIC31_data.uint);6 J  x: {  W8 }# `6 c
}" l3 X: O$ V3 p+ K

: |6 |& W" v2 D3 t( u3 C
分享到:  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-12 04:49 , Processed in 0.041247 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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